27,580
社区成员
发帖
与我相关
我的任务
分享
/******************************************************************************/
/*回复: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
/******************************************************************************/
/*回复: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
--> 测试数据: #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
*/
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