数据表如下:
项目 当月电量 累计电量 其它电量
省公司合计
500
220
地方公司合计
100
35
是这样的,单位分:省公司和6个地方公司,
省公司填写:省公司合计,500,220三个
6个地方公司填写:220<注意>,地方公司合计,100,35
<以上都存储一个表里,当然是在分别的页面填写的>我现在想用一条SQL得出上面这个表,其中220,的只选省公司填写的,100,35要选出所有的来对应的加在一起的。也就是说:省公司合计,500,220,选择省公司当月填写的。
100,35的是所有分公司当月的对应的和。谢谢!
项目 当月电量 累计电量 其它电量
省公司合计
500
220
地方公司合计
100
35
是这样的,单位分:省公司和6个地方公司,
省公司填写:省公司合计,500,220三个
6个地方公司填写:220<注意>,地方公司合计,100,35
<以上都存储一个表里,当然是在分别的页面填写的>我现在想用一条SQL得出上面这个表,其中220,的只选省公司填写的,100,35要选出所有的来对应的加在一起的。也就是说:省公司合计,500,220,选择省公司当月填写的。
100,35的是所有分公司当月的对应的和。谢谢!
给个例子:
DECLARE @t TABLE(Groups char(2),Item varchar(10),Color varchar(10),Quantity int)
INSERT @t SELECT 'aa','Table','Blue', 124
UNION ALL SELECT 'bb','Table','Red', -23
UNION ALL SELECT 'bb','Cup' ,'Green',-23
UNION ALL SELECT 'aa','Chair','Blue', 101
UNION ALL SELECT 'aa','Chair','Red', -90--统计及排序
SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '总计'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 AND GROUPING(Groups)=0 THEN Groups+' 合计'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 AND GROUPING(Item)=0 THEN Item+' 小计'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
ORDER BY GROUPING(Groups),
CASE WHEN GROUPING(Groups)=1 THEN '' ELSE Groups END DESC,
GROUPING(Item),
CASE WHEN GROUPING(Item)=1 THEN '' ELSE Item END DESC,
GROUPING(Color),
CASE WHEN GROUPING(Color)=1 THEN '' ELSE Color END DESC,
Quantity DESC
/*--结果
Groups Item Color Quantity
--------- -------------- ----------------------- -----------
bb Table Red -23
Table 小计 -23
bb Cup Green -23
Cup 小计 -23
bb 合计 -46
aa Table Blue 124
Table 小计 124
aa Chair Red -90
aa Chair Blue 101
Chair 小计 11
aa 合计 135
总计 89
--*/