SQL分类汇总语句

aaronyy2002 2008-05-19 11:30:51
列名 SUBS_NM PRMT_ID MNGT_TP PRMT_NM COMM_TP CHNL_NM
SEBJ WANGJING 0001 王净 0.00 北京今日世纪商贸有限公司
SEBJ lixiaoru 0002 李暁茹 0.00 北京今日世纪商贸有限公司
SEBJ xuyinbin 0001 许寅彬 0.00 沃尔玛总公司
SEBJ yuxianglong 0002 于翔龙 30.00 沃尔玛总公司
SEBJ zhangjianxia 0001 张建霞 30.00 沃尔玛总公司
SEBJ yangjingyu 0001 杨静雨 60.00 北京金讯恒通科技有限公司
SEBJ liuhongling 0002 刘洪玲 30.00 北京金讯恒通科技有限公司
需要得到的表:

列名 SUBS_NM PRMT_ID MNGT_TP PRMT_NM COMM_TP CHNL_NM
SEBJ WANGJING 0001 王净 0.00 北京今日世纪商贸有限公司
SEBJ lixiaoru 0002 李暁茹 0.00 北京今日世纪商贸有限公司
SEBJ TTL TTL TTL 0.00 北京今日世纪商贸有限公司
SEBJ xuyinbin 0001 许寅彬 0.00 沃尔玛总公司
SEBJ yuxianglong 0002 于翔龙 30.00 沃尔玛总公司
SEBJ zhangjianxia 0001 张建霞 30.00 沃尔玛总公司
SEBJ TTL TTL TTL 0.00 沃尔玛总公司
SEBJ yangjingyu 0001 杨静雨 60.00 北京金讯恒通科技有限公司
SEBJ liuhongling 0002 刘洪玲 30.00 北京金讯恒通科技有限公司
SEBJ TTL TTL TTL 90.00 北京金讯恒通科技有限公司
SEBJ TTL TTL TTL 150.00 TTL
求SQL语句,谢谢!
...全文
807 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Herb2 2008-05-19
  • 打赏
  • 举报
回复

/******************************************************************************/
/*回复:20080519006总:00026 */
/*主题:查询汇总 */
/*作者:二等草 */
/******************************************************************************/

set nocount on

--数据--------------------------------------------------------------------------
create table [tb] ([SUBS_NM] varchar(4),[PRMT_ID] varchar(12),[MNGT_TP] varchar(4)
,[PRMT_NM] varchar(6),[COMM_TP] numeric(4,2),[CHNL_NM] varchar(24))
insert into [tb] select 'SEBJ','WANGJING','0001','王净',0.00,'北京今日世纪商贸有限公司'
insert into [tb] select 'SEBJ','lixiaoru','0002','李暁茹',0.00,'北京今日世纪商贸有限公司'
insert into [tb] select 'SEBJ','xuyinbin','0001','许寅彬',0.00,'沃尔玛总公司'
insert into [tb] select 'SEBJ','yuxianglong','0002','于翔龙',30.00,'沃尔玛总公司'
insert into [tb] select 'SEBJ','zhangjianxia','0001','张建霞',30.00,'沃尔玛总公司'
insert into [tb] select 'SEBJ','yangjingyu','0001','杨静雨',60.00,'北京金讯恒通科技有限公司'
insert into [tb] select 'SEBJ','liuhongling','0002','刘洪玲',30.00,'北京金讯恒通科技有限公司'
go

--代码--------------------------------------------------------------------------
select subs_nm
,PRMT_ID= case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 then 'TTL' else PRMT_ID end
,MNGT_TP= case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 then 'TTL' else MNGT_TP end
,PRMT_NM= case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 then 'TTL' else PRMT_NM end
,COMM_TP=sum(COMM_TP)
,CHNL_NM=case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)+grouping(CHNL_NM )=4 then 'TTL' else CHNL_NM end
from tb
group by subs_nm,CHNL_NM,PRMT_ID,MNGT_TP,PRMT_NM with rollup
having (grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 and grouping(subs_nm)=0)
or grouping(subs_nm)+grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)+grouping(CHNL_NM )=0
go

/*结果--------------------------------------------------------------------------
subs_nm PRMT_ID MNGT_TP PRMT_NM COMM_TP CHNL_NM
------- ------------ ------- ------- ---------------------------------------- ------------------------
SEBJ lixiaoru 0002 李暁茹 .00 北京今日世纪商贸有限公司
SEBJ WANGJING 0001 王净 .00 北京今日世纪商贸有限公司
SEBJ TTL TTL TTL .00 北京今日世纪商贸有限公司
SEBJ liuhongling 0002 刘洪玲 30.00 北京金讯恒通科技有限公司
SEBJ yangjingyu 0001 杨静雨 60.00 北京金讯恒通科技有限公司
SEBJ TTL TTL TTL 90.00 北京金讯恒通科技有限公司
SEBJ xuyinbin 0001 许寅彬 .00 沃尔玛总公司
SEBJ yuxianglong 0002 于翔龙 30.00 沃尔玛总公司
SEBJ zhangjianxia 0001 张建霞 30.00 沃尔玛总公司
SEBJ TTL TTL TTL 60.00 沃尔玛总公司
SEBJ TTL TTL TTL 150.00 TTL

--清除------------------------------------------------------------------------*/
drop table tb
Herb2 2008-05-19
  • 打赏
  • 举报
回复

/******************************************************************************/
/*回复:20080519006总:00026 */
/*主题:查询汇总 */
/*作者:二等草 */
/******************************************************************************/

set nocount on

--数据--------------------------------------------------------------------------
create table [tb] ([SUBS_NM] varchar(4),[PRMT_ID] varchar(12),[MNGT_TP] varchar(4)
,[PRMT_NM] varchar(6),[COMM_TP] numeric(4,2),[CHNL_NM] varchar(24))
insert into [tb] select 'SEBJ','WANGJING','0001','王净',0.00,'北京今日世纪商贸有限公司'
insert into [tb] select 'SEBJ','lixiaoru','0002','李暁茹',0.00,'北京今日世纪商贸有限公司'
insert into [tb] select 'SEBJ','xuyinbin','0001','许寅彬',0.00,'沃尔玛总公司'
insert into [tb] select 'SEBJ','yuxianglong','0002','于翔龙',30.00,'沃尔玛总公司'
insert into [tb] select 'SEBJ','zhangjianxia','0001','张建霞',30.00,'沃尔玛总公司'
insert into [tb] select 'SEBJ','yangjingyu','0001','杨静雨',60.00,'北京金讯恒通科技有限公司'
insert into [tb] select 'SEBJ','liuhongling','0002','刘洪玲',30.00,'北京金讯恒通科技有限公司'
go

--代码--------------------------------------------------------------------------
select subs_nm
,PRMT_ID= case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 then 'TTL' else PRMT_ID end
,MNGT_TP= case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 then 'TTL' else MNGT_TP end
,PRMT_NM= case when grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 then 'TTL' else PRMT_NM end
,COMM_TP=sum(COMM_TP)
,CHNL_NM
from tb
group by subs_nm,CHNL_NM,PRMT_ID,MNGT_TP,PRMT_NM with rollup
having (grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)=3 and grouping(subs_nm)+grouping(CHNL_NM )=0)
or grouping(subs_nm)+grouping(PRMT_ID)+grouping(MNGT_TP)+grouping(PRMT_NM)+grouping(CHNL_NM )=0
go

/*结果--------------------------------------------------------------------------
subs_nm PRMT_ID MNGT_TP PRMT_NM COMM_TP CHNL_NM
------- ------------ ------- ------- ---------------------------------------- ------------------------
SEBJ lixiaoru 0002 李暁茹 .00 北京今日世纪商贸有限公司
SEBJ WANGJING 0001 王净 .00 北京今日世纪商贸有限公司
SEBJ TTL TTL TTL .00 北京今日世纪商贸有限公司
SEBJ liuhongling 0002 刘洪玲 30.00 北京金讯恒通科技有限公司
SEBJ yangjingyu 0001 杨静雨 60.00 北京金讯恒通科技有限公司
SEBJ TTL TTL TTL 90.00 北京金讯恒通科技有限公司
SEBJ xuyinbin 0001 许寅彬 .00 沃尔玛总公司
SEBJ yuxianglong 0002 于翔龙 30.00 沃尔玛总公司
SEBJ zhangjianxia 0001 张建霞 30.00 沃尔玛总公司
SEBJ TTL TTL TTL 60.00 沃尔玛总公司

--清除------------------------------------------------------------------------*/
drop table tb
Limpire 2008-05-19
  • 打赏
  • 举报
回复
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (SUBS_NM varchar(4),PRMT_ID varchar(12),MNGT_TP varchar(4),PRMT_NM varchar(6),COMM_TP numeric(4,2),CHNL_NM varchar(24))
insert into #T
select 'SEBJ','WANGJING','0001','王净',0.00,'北京今日世纪商贸有限公司' union all
select 'SEBJ','lixiaoru','0002','李暁茹',0.00,'北京今日世纪商贸有限公司' union all
select 'SEBJ','xuyinbin','0001','许寅彬',0.00,'沃尔玛总公司' union all
select 'SEBJ','yuxianglong','0002','于翔龙',30.00,'沃尔玛总公司' union all
select 'SEBJ','zhangjianxia','0001','张建霞',30.00,'沃尔玛总公司' union all
select 'SEBJ','yangjingyu','0001','杨静雨',60.00,'北京金讯恒通科技有限公司' union all
select 'SEBJ','liuhongling','0002','刘洪玲',30.00,'北京金讯恒通科技有限公司'

select * from
(
select * from #T
union all
select min(SUBS_NM),'TTL','TTL','TTL',COMM_TP=sum(COMM_TP),isnull(CHNL_NM,'TTL') from #T group by CHNL_NM with rollup
) t
order by case CHNL_NM when 'TTL' then 1 else 0 end,CHNL_NM,case PRMT_NM when 'TTL' then 1 else 0 end

/*
SUBS_NM PRMT_ID MNGT_TP PRMT_NM COMM_TP CHNL_NM
------- ------------ ------- ------- ------------ ------------------------
SEBJ WANGJING 0001 王净 0.00 北京今日世纪商贸有限公司
SEBJ lixiaoru 0002 李暁茹 0.00 北京今日世纪商贸有限公司
SEBJ TTL TTL TTL 0.00 北京今日世纪商贸有限公司
SEBJ yangjingyu 0001 杨静雨 60.00 北京金讯恒通科技有限公司
SEBJ liuhongling 0002 刘洪玲 30.00 北京金讯恒通科技有限公司
SEBJ TTL TTL TTL 90.00 北京金讯恒通科技有限公司
SEBJ xuyinbin 0001 许寅彬 0.00 沃尔玛总公司
SEBJ yuxianglong 0002 于翔龙 30.00 沃尔玛总公司
SEBJ zhangjianxia 0001 张建霞 30.00 沃尔玛总公司
SEBJ TTL TTL TTL 60.00 沃尔玛总公司
SEBJ TTL TTL TTL 150.00 TTL
*/
dawugui 2008-05-19
  • 打赏
  • 举报
回复
select * from 
(
select * from tb
union all
select SUBS_NM = 'SEBJ' , PRMT_ID = 'TTL' , MNGT_TP = 'TTL' , PRMT_NM = 'TTL' , COMM_TP = sum(COMM_TP) , CHNL_NM from tb group by CHNL_NM
union all
select SUBS_NM = 'SEBJ' , PRMT_ID = 'TTL' , MNGT_TP = 'TTL' , PRMT_NM = 'TTL' , COMM_TP = sum(COMM_TP) , CHNL_NM = 'TTL' from tb
) t
order by case when CHNL_NM 'TTL' then 2 else 1 end , case when PRMT_NM when 'TTL' then 2 else 1 end
aaronyy2002 2008-05-19
  • 打赏
  • 举报
回复
TTL 就是总结,自己增加的
Limpire 2008-05-19
  • 打赏
  • 举报
回复
TTL是什么

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧