其實這一篇並沒有新的語法以及技術
只是一個在工作上運用到的小小題目
來這邊讓大家腦力激盪一下
我的答案不一定是最好,若有更簡單、簡短的語法,歡迎留言
備註:若是在工作上應用的話,請善用temp table,這樣的語法效能可能不太好
DDL
CREATE TABLE ZTEST(
AAAA VARCHAR2(3),
BBBB VARCHAR2(3),
E001 NUMBER(10),
E002 NUMBER(10),
E003 NUMBER(10)
);
DML
INSERT INTO ZTEST(AAAA,BBBB,E001,E002,E003) VALUES('01','001',2,3,4);
INSERT INTO ZTEST(AAAA,BBBB,E001,E002,E003) VALUES('01','002',1,2,3);
INSERT INTO ZTEST(AAAA,BBBB,E001,E002,E003) VALUES('02','002',2,5,4);
INSERT INTO ZTEST(AAAA,BBBB,E001,E002,E003) VALUES('02','003',5,5,8);
題目:以AAAA欄位為組別,依照BBBB欄位去加總數值
BBBB為001時代表需加總E001
BBBB為002時代表需加總E002
舉例:AAAA為01,而BBBB有001、002
則結果要顯示
AAAA , E001 ,E002
----------------------------------
01 , 3 ,5
我的解法
SELECT C.AAAA , SUM(C.SUM_E001) , SUM(C.SUM_E002) , SUM(C.SUM_E003)
FROM (
SELECT A.AAAA ,CASE WHEN B.BBBB IN '001' THEN A.SUM_E001 END SUM_E001
,CASE WHEN B.BBBB IN '002' THEN A.SUM_E002 END SUM_E002
,CASE WHEN B.BBBB IN '003' THEN A.SUM_E003 END SUM_E003
FROM ( SELECT AAAA,SUM(E001) SUM_E001
,SUM(E002) SUM_E002
,SUM(E003) SUM_E003
FROM ZTEST GROUP BY AAAA) A
,( SELECT AAAA,BBBB
FROM ZTEST GROUP BY AAAA , BBBB) B
WHERE A.AAAA = B.AAAA
) C
GROUP BY C.AAAA
ORDER BY C.AAAA
留言列表