数据汇总加排序[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 zjcxc 的 blog

原帖地址:
http://community.csdn.net/expert/topic/3317/3317231.xml?temp=.7252313

程序选择了: 项目名称,项目年度,地市,申请单位,支持金额这几个字段
其中汇总字段为项目年度,地市
查询结果列就要按需要项目名称,项目年度,地市,申请单位,支持金额排列好
并能按指定的字段进行排序处理
要求生成的结果:
=================================================================
序号   项目名称    项目年度    地市            申请单位    支持金额
1      名称1       2004        省直            1公司      100
2      名称2       2004        省直            2公司      100
3                  2004        省直合计                   200
4      名称3       2004        石家庄          3公司      100
5                  2004        石家庄合计                 100
6                  2004合计                               300
7      名称3       2005        石家庄          3公司       100
8                  2005        石家庄合计                  100
9                  2005合计                               100
10      总计                                               400
=================================================================

------------------------------------------------------------------------------------

--假设如下临时表是经过第一次汇总+排序处理得到的(第一次处理不处理小计,总计等)

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是防止小计,总计排序错乱需要的,后面的支持金额是其他排序需要的

本文关键:数据汇总加排序
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top