logo 西林@生存 - 骑猪闯天下!
自动汇总函数的应用:ROLLUP
2006-12-16 22:15:00 By:xling

有如下要求:


数据如下:
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

转我的贴,写你的名,是一种可耻的行为!请不要让我BS你!
阅读全文 | 回复(0) | 引用通告 | 编辑

发表评论:

    密码:
    主页:
    标题:
    页面数据正在载入...
<<  < 2007 - 12 >  >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Placard
1,長江後浪推前浪,前浪死在沙灘上!
2,有了钱的男人,才是真正的男人...
3,不要以为把你的小JJ埋进土里,你就rape了整个地球;不要以为把你的小JJ朝向天空,你就rape了整个宇宙!
Logon System
Search
Info about this blog
Others
myDream
bxna 京ICP备05002321号