这样的数据 月 日 编号 仓库 进库日期 件数 重量
200901 01 1 K1 20090101 1 100
200901 02 1 K1 20090103 2 1000我要查询出这样的数据SELECT 月,日,编号,仓库,进库日期,SUM(件数),SUM(重量) FROM TABLE GROUP BY 月,日,编号,仓库,进库日期且按月进行分级汇总.用rollup要怎么写呢???????
200901 01 1 K1 20090101 1 100
200901 02 1 K1 20090103 2 1000我要查询出这样的数据SELECT 月,日,编号,仓库,进库日期,SUM(件数),SUM(重量) FROM TABLE GROUP BY 月,日,编号,仓库,进库日期且按月进行分级汇总.用rollup要怎么写呢???????
Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句。如果是Group by ROLLUP(A, B, C)的话,首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。 如果是GROUP BY CUBE(A, B, C),则首先会对(A、B、C)进行GROUP BY,然后依次是(A、B),(A、C),(A),(B、C),(B),(C),最后对全表进行GROUP BY操作。 grouping_id()可以美化效果。除了使用GROUPING函数,还可以使用GROUPING_ID来标识GROUP BY的结果。 也可以 Group by Rollup(A,(B,C)) ,Group by A Rollup(B,C),…… 这样任意按自己想要的形式结合统计数据,非常方便。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shanyin/archive/2009/10/08/4641823.aspx
SELECT 月,日,编号,仓库,进库日期,SUM(件数),SUM(重量) FROM TABLE GROUP BY rollup(月,日,编号,仓库,进库日期 )
SELECT 月,日,编号,仓库,进库日期,SUM(件数),SUM(重量) FROM TABLE GROUP BY 月,日,编号,仓库,进库日期
union allSELECT 月,SUM(件数),SUM(重量) FROM TABLE GROUP BY rollup(月)
如果你想用rollup对月进行分组的话 那么除了两个SUM字段 其他字段该如何显示呢?
举个例子说吧
SQL> select * from test; MONTH DAY NUM STORE INTIME QUANTITY WEIGHT
---------- --- --- ---------- --------------- -------- ----------
1 1 1 5 11-JAN-10 2 100
1 2 2 5 11-JAN-10 3 100
2 1 3 6 11-JAN-10 4 100
SQL> select month,max(day),max(num),max(store),max(intime),sum(quantity) sum_qua
ntity,sum(weight)
2 sum_weight
3 from test
4 group by rollup(month)
5 ;
MONTH MAX(DAY) MAX(NUM) MAX(STORE) MAX(INTIME) SUM_QUANTITY SUM_WEIGHT
---------- -------- -------- ---------- --------------- ------------ ----------
1 2 2 5 11-JAN-10 5 200
2 1 3 6 11-JAN-10 4 100
2 3 6 11-JAN-10 9 300
我这里为其他没有出现在rollup的字段加上了MAX函数 不然的话会提示错误不是一个分组语句
SQL> select month,sum(quantity) sum_quantity,sum(weight)
2 sum_weight
3 from test
4 group by rollup(month)
5 ; MONTH SUM_QUANTITY SUM_WEIGHT
---------- ------------ ----------
1 5 200
2 4 100
9 300ROLLUP的使用参考下面链接
http://blog.csdn.net/wh62592855/archive/2009/11/16/4817920.aspx