[SQL]-Oracle分組函數ROULLUP的應用

來源:互聯網
上載者:User

標籤:

首先部分說明:
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操作。

因工作要做個報表,因此想就在資料庫直接跑個報表出來,取公司部分資料整理如下:

SELECT CLP.ITEMNAME AS PORVINCE,       CLC.ITEMNAME AS CITY,       SUM(CASE WHEN C2.ITEMNAME= ‘標準產品‘ THEN C.BUSINESSSUM ELSE 0 END) AS 標準產品,       SUM(CASE WHEN C2.ITEMNAME= ‘VIP產品‘ THEN C.BUSINESSSUM ELSE 0 END) AS VIP產品,       SUM(C.BUSINESSSUM) AS 總計  FROM BUSINESS_CONTRACT C  LEFT JOIN STORE_INFO S         ON C.STORES = S.SNO  LEFT JOIN CODE_LIBRARY CLP         ON S.PROVINCE = CLP.ITEMNO        AND CLP.CODENO = ‘ProvinceCodeByHand‘  LEFT JOIN CODE_LIBRARY CLC         ON S.CITY = CLC.ITEMNO        AND CLC.CODENO = ‘CityCodeByHand‘  LEFT JOIN business_type T         ON C.BUSINESSTYPE=T.TYPENO  LEFT JOIN CODE_LIBRARY c2         ON T.PROMOTIONTYPE = C2.ITEMNO        AND C2.CODENO = ‘PromotionType‘WHERE CLP.ITEMNAME=‘廣東省‘OR CLP.ITEMNAME=‘湖南省‘GROUP BY CLP.ITEMNAME,CLC.ITEMNAME

查詢結果:

在這裡需要在最後加一行合計列,這裡可以用到自動彙總函數ROULLUP,與GROUP BY連用,寫法如下:

GROUP BY ROLLUP(CLP.ITEMNAME,CLC.ITEMNAME)

結果如下:

會發現,該函數會對廣東省及湖南省都有個小總計,最後是全部的總計,如果只需要對全部做一個總計,可以使用grouping_id進行美化,代碼如下:

GROUP BY ROLLUP(CLP.ITEMNAME,CLC.ITEMNAME)HAVING grouping_id(CLP.ITEMNAME,CLC.ITEMNAME)!=1

結果如下:

這裡對grouping_id說明:
總計是grouping_id=3
小計grouping_id=1
記錄是grouping_id=0

以上

[SQL]-Oracle分組函數ROULLUP的應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.