有如下要求:
数据如下: trime tno salary ---- -- --- 2006-12-11 04 100.0 2006-12-11 04 100.0 2006-12-11 05 0.0 2006-12-11 05 100.0 2006-12-11 05 150.0 2006-12-11 05 0.0 2006-12-11 05 0.0 2006-12-11 05 0.0 2006-12-12 05 300.0 2006-12-12 05 300.0 2006-12-12 69 300.0 2006-12-12 69 0.0 2006-12-12 69 0.0 2006-12-12 69 300.0
希望得到查询后的数据效果 trime tno salary ---- -- --- 2006-12-11 04 100.0 2006-12-11 04 100.0 合计 小计 200.0 2006-12-11 05 0.0 2006-12-11 05 100.0 2006-12-11 05 150.0 2006-12-11 05 0.0 2006-12-11 05 0.0 2006-12-11 05 0.0 合计 小计 250.0 总计 小合计 450.0 2006-12-12 05 300.0 2006-12-12 05 300.0 合计 小计 600.0 2006-12-12 69 300.0 2006-12-12 69 0.0 2006-12-12 69 0.0 2006-12-12 69 300.0 合计 小计 600.0 总计 小合计 1200.0 大总计 小计 1650.0
用一句SQL完全可以实现,但是这是出力不讨好的事情,因为用ReportsBuilder可以轻松实现。
现在给我的解决方法:
CREATE TABLE tst1(trime DATE,tno VARCHAR2(8),salary NUMBER(18,1))
数据插入省略。
查询语句,红色字体为枋心:
SELECT DECODE(C.G_TRIME || C.G_TNO,'-1-1',TO_CHAR(C.TRIME,'YYYY-MM-DD'),C.DESP) AS TRIME, C.TNO,C.S_SALARY FROM( SELECT DECODE(G_TRIME || G_TNO,'00','С¼Æ','01','СºÏ¼Æ','11','×ܼÆ') AS DESP, TRIME,TNO,S_SALARY, G_TRIME, G_TNO FROM( SELECT TRIME,TNO,SUM(SALARY) AS S_SALARY, GROUPING(TRIME) AS G_TRIME, GROUPING(TNO) AS G_TNO FROM TST1 GROUP BY ROLLUP(TRIME,TNO) ) A UNION ALL SELECT '' AS DESP, TRIME,TNO,SALARY, -1, -1 FROM TST1 B ) C ORDER BY C.TRIME,C.TNO,C.DESP DESC
运行结果:
问题来源:
http://www.oracle.com.cn/viewthread.php?tid=110742&pid=875686&page=1&extra=page%3D1#pid875686 |