PS,1880后程序員

          看不完的牙,寫不完的程序,跑不完的步。
          隨筆 - 97, 文章 - 34, 評論 - 10, 引用 - 0
          數據加載中……

          Oracle 逐級匯總

           CREATE TABLE report

            ( id NUMBER(2),

              year NUMBER(4),

              month NUMBER(2),

              amt NUMBER(3)) ;

              

           

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 1, 110 ) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 2, 120) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 3, 130) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 4, 140) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 5, 150) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 6, 160) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 7, 170) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 8, 180) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 9, 190) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 10, 100) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 11, 110) ;

          INSERT INTO report( id, year, month, amt ) VALUES(1, 2011, 12, 110) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 1, 110 ) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 2, 120) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 3, 130) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 4, 140) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 5, 150) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 6, 160) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 7, 170) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 8, 180) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 9, 190) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 10, 100) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 11, 110) ;

          INSERT INTO report( id, year, month, amt ) VALUES(2, 2012, 12, 110) ;

          -- 逐級匯總

           

          select id, year, month, sum(amt) 

            from report 

            group by rollup( id, year, month ) ;

           

                  ID       YEAR      MONTH   SUM(AMT)

          ---------- ---------- ---------- ----------

                   1       2011          1        220

                   1       2011          2        240

                   1       2011          3        260

                   1       2011          4        280

                   1       2011          5        300

                   1       2011          6        320

                   1       2011          7        340

                   1       2011          8        360

                   1       2011          9        380

                   1       2011         10        200

                   1       2011         11        220

                   1       2011         12        220

                   1       2011                  3340 -- 1, 2011, 小計

                   1                             3340 -- 1, 小計

                   2       2012          1        110

                   2       2012          2        120

                   2       2012          3        130

                   2       2012          4        140

                   2       2012          5        150

                   2       2012          6        160

                   2       2012          7        170

                   2       2012          8        180

                   2       2012          9        190

                   2       2012         10        100

                   2       2012         11        110

                   2       2012         12        110

                   2       2012                  1670 -- 2, 2012, 小計

                   2                             1670 -- 2, 小計

                                                 5010 -- 1+2, 總計

           

          如果只要每年的小計, SQL如下

           

          select *

            from (

          select id, year, month, sum(amt) 

            from report 

            group by rollup( id, year, month ) )

            where id is not null

              and year is not null ;

           

                  ID       YEAR      MONTH   SUM(AMT)

          ---------- ---------- ---------- ----------

                   1       2011          1        220

                   1       2011          2        240

                   1       2011          3        260

                   1       2011          4        280

                   1       2011          5        300

                   1       2011          6        320

                   1       2011          7        340

                   1       2011          8        360

                   1       2011          9        380

                   1       2011         10        200

                   1       2011         11        220

                   1       2011         12        220

                   1       2011                  3340

                   2       2012          1        110

                   2       2012          2        120

                   2       2012          3        130

                   2       2012          4        140

                   2       2012          5        150

                   2       2012          6        160

                   2       2012          7        170

                   2       2012          8        180

                   2       2012          9        190

                   2       2012         10        100

                   2       2012         11        110

                   2       2012         12        110

                   2       2012                  1670

           

          posted on 2012-08-09 13:50 amenglai 閱讀(425) 評論(0)  編輯  收藏 所屬分類: 編程語言

          主站蜘蛛池模板: 锡林浩特市| 民县| 萝北县| 龙山县| 三原县| 南城县| 册亨县| 东海县| 玉山县| 成都市| 新宾| 基隆市| 文登市| 临澧县| 邻水| 富平县| 织金县| 大悟县| 微山县| 安达市| 周口市| 孟州市| 南昌县| 晋中市| 民丰县| 鹤山市| 安吉县| 观塘区| 遂溪县| 朝阳区| 威远县| 财经| 上高县| 天等县| 双江| 土默特左旗| 大竹县| 德钦县| 台湾省| 广河县| 赤峰市|