1. 程式人生 > >oracle--聚合函數和case when結合使用

oracle--聚合函數和case when結合使用

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.44
20180613 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 LEFT
JOIN 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結合使用