日期:2014-05-18  浏览次数:20674 次

大家帮忙看看,一个rollup的问题
才转到mssqlserver下,算个新手,这几天开发遇到一个问题:
数据例子如下

月份         部门     人员     数量
200701     01         01         2
200701     02         01         2
200702     01         01         3

怎么能产生:
月份           部门       人员       数量
200701       01           01             2
200701       02           01             2
200701                                     4
200702       01           01             1
200702                                     1

如果用下面语句:
select   月份,   部门,   人员,   sum(数量)
from   test
group   by   月份,部门,人员   with   rollup

则会出现部门的汇总:
200701     01       01         2
200701     01       合计     2
200701     02       01         2
200701     02       合计     2
200701                           4
。。。。。

以前用oracle,在里面处理很方便:
select   月份,部门,人员,sum(数量)
from   test
group   by   rollup(月份,(部门,人员))

但试了一下,在with   rollup里不支持括号,请问各人高手,
mssql里有没有类似功能?
另外,不要用   select   月份,部门+人员   这种方式,应用复杂的时候用起很恼火。

------解决方案--------------------
今天才知道 group by 还可以用 with rollup 选项,真的很不错,可怜我以前还写一些很复杂的逻辑来处理

感谢楼主!!!



------解决方案--------------------
create table tb(月份 varchar(6),部门 varchar(10),人员 varchar(10),数量 int)
insert into tb values( '200701 ' , '01 ', '01 ', 2)
insert into tb values( '200701 ' , '02 ', '01 ', 2)
insert into tb values( '200702 ' , '01 ', '01 ', 3)

select * from tb
union all
select 月份,部门= ' ',人员= ' ',sum(数量) 数量 from tb group by 月份
order by 月份

drop table tb

/*
月份 部门 人员 数量
------ ---------- ---------- -----------
200701 01 01 2
200701 02 01 2
200701 4
200702 01 01 3
200702 3

(所影响的行数为 5 行)
*/