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
(支持金额)
--
group by 分组是为了这里的合计字段
,
grouping
(项目年度),项目年度
--
这里及下面的是排序需要的
,
grouping
(地市),地市
,
grouping
(申请单位),申请单位
,
grouping
(申请单位)
+
1
from
#t
group
by
项目年度,地市,申请单位
with
rollup
--
这是要生成小计,总计的分组字段
)a
order
by
s1,s2,s3,s4,s5,s6,s7,支持金额
--
s1~s6是防止小计,总计排序错乱需要的,后面的支持金额是其他排序需要的
go