oracle--聚合函數和case when結合使用
阿新 • • 發佈:2018-06-15
AS lse 3.4 ont The bsp 分享 div HA
需求:
1 根據客戶信息表中信息比較出相應余額。
2 表中有客戶號,余額,各個時間點的分區信息,每個分區中客戶號唯一。
3 客戶信息中分區有10、11、12、13、14、15。
4 得到每個比上日余額信息,如下面表樣。
--創建測試表 客戶信息表 CREATE TABLE CUST_INFO_TEST( CUST_NO VARCHAR2(5), AUM_EDU NUMBER, DT VARCHAR(10) ) --在表中插入測試數據 SELECT * FROM CUST_INFO_TEST FOR UPDATE --測試數據如下 CUST_NO AUM_EDU DT ---------- ---------- -----------1 11 20180610 2 22 20180610 3 33 20180610 1 11.11 20180611 2 22.22 20180611 3 33.33 20180611 1 11.21 20180612 2 22.32 20180612 3 33.33 20180612 1 11.44 20180613 2 22.4420180613 3 33.44 20180613 --使用表的自關聯實現 SELECT A1.CUST_NO ,A3.AUM_EDU - A2.AUM_EDU AS BSR_11 ,A4.AUM_EDU - A3.AUM_EDU AS BSR_12 ,A1.AUM_EDU - A4.AUM_EDU AS BSR_13 FROM CUST_INFO_TEST A1 LEFT JOIN CUST_INFO_TEST A2 ON A1.CUST_NO = A2.CUST_NO AND A2.DT = ‘20180610‘ LEFTJOIN CUST_INFO_TEST A3 ON A1.CUST_NO = A3.CUST_NO AND A3.DT = ‘20180611‘ LEFT JOIN CUST_INFO_TEST A4 ON A1.CUST_NO = A4.CUST_NO AND A4.DT = ‘20180612‘ WHERE A1.DT= ‘20180613‘; --得到如下結果 CUST_NO BSR_11 BSR_12 BSR_13 -------- ---------- ---------- ---------- 1 0.11 0.1 0.23 2 0.22 0.1 0.12 3 0.33 0 0.11 --優化 SELECT CUST_NO ,SUM(CASE WHEN DT=‘20180611‘ THEN AUM_EDU ELSE 0 END - CASE WHEN DT=‘20180610‘ THEN AUM_EDU ELSE 0 END) AS BSR_11 ,SUM(CASE WHEN DT=‘20180612‘ THEN AUM_EDU ELSE 0 END - CASE WHEN DT=‘20180611‘ THEN AUM_EDU ELSE 0 END) AS BSR_12 ,SUM(CASE WHEN DT=‘20180613‘ THEN AUM_EDU ELSE 0 END - CASE WHEN DT=‘20180612‘ THEN AUM_EDU ELSE 0 END) AS BSR_13 FROM CUST_INFO_TEST WHERE DT IN (‘20180610‘,‘20180611‘,‘20180612‘,‘20180613‘) GROUP BY CUST_NO --得到結果和上面一樣 CUST_NO BSR_11 BSR_12 BSR_13 -------- ---------- ---------- ---------- 1 0.11 0.1 0.23 2 0.22 0.1 0.12 3 0.33 0 0.11
oracle--聚合函數和case when結合使用