博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tsql统计之二(实例详解 之rollup cube)
阅读量:4971 次
发布时间:2019-06-12

本文共 2052 字,大约阅读时间需要 6 分钟。

例一:数据准备:

 

ExpandedBlockStart.gif
View Code
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

 

1 按项目年度,地市,申请单位做小计,总计的

ExpandedBlockStart.gif
View Code
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

 

2只按项目年度,地市做小计,总计的,比较一下看看有什么不同了。

 

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

结果如下:与上面相比没有了按申请单位合计的 行数据,这是有group by决定的

转载于:https://www.cnblogs.com/gaiyang/archive/2011/04/17/2018645.html

你可能感兴趣的文章
poj 2109 pow函数也能这么用?p的开n次方
查看>>
Oracle database link
查看>>
清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)
查看>>
POJ 1840 Eqs HASH
查看>>
python调用shell小技巧
查看>>
TL431的几种常用用法
查看>>
BZOJ 1833: [ZJOI2010]count 数字计数( dp )
查看>>
关于toString()和String()要说几句话
查看>>
bzoj 3751[NOIP2014]解方程
查看>>
CSS(二) 文字样式属性,背景和列表
查看>>
js 经典闭包题目详解
查看>>
在项目中移除CocoaPods
查看>>
面试题三 替换空格
查看>>
LeetCode104.二叉树最大深度
查看>>
linux usb驱动——Gadget代码介绍
查看>>
【洛谷】CYJian的水题大赛【第二弹】解题报告
查看>>
POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】...
查看>>
L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
查看>>
Git一分钟系列--快速安装git客户端
查看>>
bzoj 3160 万径人踪灭 —— FFT
查看>>