create table #t(項目名稱 varchar(10),項目年度 varchar(10),地市 varchar(10),申請單位 varchar(10),支持金額 int) insert #t select '名稱1','2004','省直' ,'1公司',400 union all select '名稱2','2004','省直' ,'2公司',300 union all select '名稱3','2004','石家莊','3公司',200 union all select '名稱3','2005','石家莊','3公司',100 go
--下面是處理 select 項目名稱,項目年度,地市,申請單位,支持金額 from( --這是實現匯總的部分(不考慮小計,總計處理部分的匯總) select * ,s1=0,s2=項目年度,s3=0,s4=地市,s5=0,s6=申請單位,s7=0 --這是排序需要的 from #t union all --這是實現匯總的小計,總計部分 select 項目名稱=case when grouping(項目年度)=1 then '總計' else '' end ,項目年度=case when grouping(項目年度)=0 and grouping(地市)=1 then 項目年度+'合計' else '' end ,地市=case when grouping(項目年度)=0 and grouping(地市)=0 and grouping(申請單位)=1 then 地市+'合計' else '' end ,申請單位=case when grouping(申請單位)=0 then 申請單位+'合計' else '' end ,支持金額=sum(支持金額) ,grouping(項目年度),項目年度 --這里及下面的是排序需要的 ,grouping(地市),地市 ,grouping(申請單位),申請單位 ,grouping(申請單位)+1 from #t group by 項目年度,地市,申請單位 with rollup --這是要生成小計,總計的分組字段 )a order by s1,s2,s3,s4,s5,s6,s7,支持金額 --s1~s6是防止小計,總計排序錯亂需要的,后面的支持金額是其他排序需要的 go
--上面是按項目年度,地市,申請單位做小計,總計的 --下面是只按項目年度,地市做小計,總計的,比較一下,更容易看出規(guī)律 --下面是處理 select 項目名稱,項目年度,地市,申請單位,支持金額 from( --這是實現匯總的部分(不考慮小計,總計處理部分的匯總) select * ,s1=0,s2=項目年度,s3=0,s4=地市,s5=0 --這是排序需要的 from #t union all --這是實現匯總的小計,總計部分 select 項目名稱=case when grouping(項目年度)=1 then '總計' else '' end ,項目年度=case when grouping(項目年度)=0 and grouping(地市)=1 then 項目年度+'合計' else '' end ,地市=case when grouping(地市)=0 then 地市+'合計' else '' end ,'' ,支持金額=sum(支持金額) ,grouping(項目年度),項目年度 --這里及下面的是排序需要的 ,grouping(地市),地市 ,grouping(地市)+1 from #t group by 項目年度,地市 with rollup --這是要生成小計,總計的分組字段 )a order by s1,s2,s3,s4,s5,支持金額 --s1~s6是防止小計,總計排序錯亂需要的,后面的支持金額是其他排序需要的