|
发表于 2014-6-1 14:31:36
|
显示全部楼层
这么简单的题都没人答出来啊.....
- 以mysql为例:
- (沿用上面仁兄的建表语句)
- create table tmp_test
- ( mon int(2),
- item varchar(10),
- num int(11)
- )
- insert into tmp_test
- select 1, '6001', 10 from dual union all
- select 1, '6002', 15 from dual union all
- select 1, '6003', 20 from dual union all
- select 2, '6001', 6 from dual union all
- select 2, '6002', 5 from dual union all
- select 3, '6002', 10 from dual union all
- select 3, '6003', 8 from dual
- -- 思路就是先补全月份,再按item的分组进行累加.
- select mon, item, num, sum from (
- select mon, item, num, if(@i = item, @x := @x + num, @x := num) as sum, @i := item
- from (select @x := 0) x, (select @i := 0) i, (
- select b.mon, b.item, ifnull(a.num, 0) num
- from tmp_test a
- right join (
- select mon, item from (select distinct mon from tmp_test) a, (select distinct item from tmp_test) b
- ) b on a.mon = b.mon and a.item = b.item
- order by b.item, b.mon
- ) t
- ) tt order by mon, item
- 如果是oracle就更简单啦..(当然还是得先补全月份,就省略了...)
- select mon, item, num, sum(num) over(partition by item order by mon) from t
复制代码
|
|