其實這一篇並沒有新的語法以及技術

只是一個在工作上運用到的小小題目

來這邊讓大家腦力激盪一下

我的答案不一定是最好,若有更簡單、簡短的語法,歡迎留言

備註:若是在工作上應用的話,請善用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

 

 

 

 

 

arrow
arrow

    我的暱稱 發表在 痞客邦 留言(0) 人氣()