WITH TA AS( SELECT '1' FLAG , 1 COL1, 2 COL2, 3 COL3, 4 COL4, 5 COL5 FROM DUAL UNION ALL SELECT '2' , 6, 7, 8, 9, 10 FROM DUAL UNION ALL SELECT '3' , 11, 12, 13, 14, 15 FROM DUAL UNION ALL SELECT '4' , 16, 17, 18, 19, 20 FROM DUAL ) SELECT * FROM TA --아래와 같이 원하는 결과값을 붙이고 싶습니다. --첫번째 추가 로우는 FALG1 + FLAG3 의 COL 합계 --두번째 추가 로우는 FALG2 + FLAG4 의 COL 합계 UNION ALL SELECT 'FLAG1+FLAG3' , 12, 14, 16, 18, 20 FROM DUAL UNION ALL SELECT 'FLAG2+FLAG4' , 22, 22, 26, 28, 30 FROM DUAL ;
-------------------------------------------------------------------------------------
질문을 수정합니다...
WITH TA AS( SELECT '1' FLAG , 1 COL1, 2 COL2, 3 COL3, 4 COL4, 5 COL5 FROM DUAL UNION ALL SELECT '2' , 6, 7, 8, 9, 10 FROM DUAL UNION ALL SELECT '3' , 11, 12, 13, 14, 15 FROM DUAL UNION ALL SELECT '4' , 16, 17, 18, 19, 20 FROM DUAL UNION ALL SELECT '5' , 21, 22, 23, 24, 25 FROM DUAL ) SELECT * FROM TA --아래와 같이 원하는 결과값을 붙이고 싶습니다. --첫번째 추가 로우는 FLAG값이 1과 3의 COL 합계 --두번째 추가 로우는 FLAG값이 2와 3의 COL 합계 --FLAG는 1,2,3 외에 여러 로우가 나올수 있으며.. 계산은 무조건 1,2,3 으로만 계산이 됩니다. UNION ALL SELECT 'FLAG1+FLAG3' , 12, 14, 16, 18, 20 FROM DUAL UNION ALL SELECT 'FLAG2+FLAG3' , 17, 19, 21, 23, 25 FROM DUAL ;
WITH TA AS( SELECT '1' FLAG , 1 COL1, 2 COL2, 3 COL3, 4 COL4, 5 COL5 FROM DUAL UNION ALL SELECT '2' , 6, 7, 8, 9, 10 FROM DUAL UNION ALL SELECT '3' , 11, 12, 13, 14, 15 FROM DUAL UNION ALL SELECT '4' , 16, 17, 18, 19, 20 FROM DUAL ) SELECT 'FLAG'||LISTAGG(FLAG, '+FLAG') WITHIN GROUP(ORDER BY FLAG) FLAG , SUM(COL1) COL1 , SUM(COL2) COL2 , SUM(COL3) COL3 , SUM(COL4) COL4 , SUM(COL5) COL5 FROM TA GROUP BY MOD(FLAG,2) ORDER BY 1 ;
WITH TA AS( SELECT '1' FLAG , 1 COL1, 2 COL2, 3 COL3, 4 COL4, 5 COL5 FROM DUAL UNION ALL SELECT '2' , 6, 7, 8, 9, 10 FROM DUAL UNION ALL SELECT '3' , 11, 12, 13, 14, 15 FROM DUAL UNION ALL SELECT '4' , 16, 17, 18, 19, 20 FROM DUAL UNION ALL SELECT '5' , 21, 22, 23, 24, 25 FROM DUAL ) SELECT * FROM TA --아래와 같이 원하는 결과값을 붙이고 싶습니다. --첫번째 추가 로우는 FLAG값이 1과 3의 COL 합계 --두번째 추가 로우는 FLAG값이 2와 3의 COL 합계 --FLAG는 1,2,3 외에 여러 로우가 나올수 있으며.. 계산은 무조건 1,2,3 으로만 계산이 됩니다. UNION ALL SELECT 'FLAG1+FLAG3' , 12, 14, 16, 18, 20 FROM DUAL UNION ALL SELECT 'FLAG2+FLAG3' , 17, 19, 21, 23, 25 FROM DUAL ;
빠른답변 감사합니다.
일단 제가 질문을 정확하게 하지 못한점 죄송합니다.
제가 원했던거는 답변주신것처럼 그룹으로 묶인게 아니라.. 특정로우만을 가지고 계산목적이였습니다.
위와 같이 할려면 어떻게 해야할까요 ..
WITH TA AS( SELECT '1' FLAG , 1 COL1, 2 COL2, 3 COL3, 4 COL4, 5 COL5 FROM DUAL UNION ALL SELECT '2' , 6, 7, 8, 9, 10 FROM DUAL UNION ALL SELECT '3' , 11, 12, 13, 14, 15 FROM DUAL UNION ALL SELECT '4' , 16, 17, 18, 19, 20 FROM DUAL UNION ALL SELECT '5' , 6, 1, 118, 9, 201 FROM DUAL UNION ALL SELECT '6' , 1, 1, 218, 149, 240 FROM DUAL ) SELECT 'FLAG'||LISTAGG(FLAG, '+FLAG') WITHIN GROUP(ORDER BY FLAG) FLAG , SUM(COL1) COL1 , SUM(COL2) COL2 , SUM(COL3) COL3 , SUM(COL4) COL4 , SUM(COL5) COL5 FROM TA WHERE FLAG IN (1,2,3,4) GROUP BY DECODE(FLAG,1,1,2,2,3,1,4,2,0) ORDER BY 1 ;
추가답변 너무 감사합니다.
제가 쓰는 오라클이 10g라서 실행은 안되지만 결과값 예상은 됩니다.
결과값이 FLAG값이 1과3을 뭉치고 2와 4를 뭉쳐서 계산 시켜주는거 같은데요..
1과 3의 합계 , 2와 3의 합계 를 출력하고 싶습니다.
더불어 응용해서 더하기를 나누기로 바꿔서.. FLAG3 / FLAG1 과 FALG3 / FLAG2 의 값을 뽑고 싶습니다.
처음에는 답변이 SUM 이 아닌 + 로 예상을 해서 나중에 제가 나누기로 변경할려고 했는데
그룹함수 SUM 으로 계산이 되니.. 제가 나누기로 변경하기가 너무 어렵네요 ㅠㅠ
그리고 GROUP BY DECODE 쓰는 방법을 알게되어 너무 감사합니다.
WITH TA AS( SELECT '1' FLAG , 1 COL1, 2 COL2, 3 COL3, 4 COL4, 5 COL5 FROM DUAL UNION ALL SELECT '2' , 6, 7, 8, 9, 10 FROM DUAL UNION ALL SELECT '3' , 11, 12, 13, 14, 15 FROM DUAL UNION ALL SELECT '4' , 16, 17, 18, 19, 20 FROM DUAL UNION ALL SELECT '5' , 6, 1, 118, 9, 201 FROM DUAL UNION ALL SELECT '6' , 1, 1, 218, 149, 240 FROM DUAL ) SELECT 'FLAG'||AA.FLAG||'+'||'FLAG'||BB.FLAG FLAG , AA.COL1 + BB.COL1 COL1_HAP , AA.COL2 + BB.COL2 COL2_HAP , AA.COL3 + BB.COL3 COL3_HAP , AA.COL4 + BB.COL4 COL4_HAP , AA.COL5 + BB.COL5 COL5_HAP FROM TA AA, TA BB WHERE AA.FLAG = 3 AND BB.FLAG IN (1,2) ;