CD DT NUM1 NUM2 NUM3 NUM3 NUM4 NUM5
A 20190212 10 10 20 30 40 50
B 20190212 10 10 20 30 40 50
하나의 테이블에서 위와같이 조회되는 쿼리가 있다고 하면
DT NUM1_A NUM2_A NUM3_A NUM3_A NUM4_A NUM5_A NUM1_B NUM2_B NUM3_B NUM3_B NUM4_B NUM5_B
20190212 10 10 20 30 40 50 10 10 20 30 40 50
같은 DT일 경우 CD의 값이 A인 데이터와 B인 데이터를 한줄로 표현하고 싶습니다.
WITH t AS ( SELECT 'A' cd, '20190212' dt, 10 num1, 20 num2, 30 num3, 40 num4, 50 num5 FROM dual UNION ALL SELECT 'B', '20190212', 10, 20, 30, 40, 50 FROM dual ) SELECT dt , MIN(DECODE(cd, 'A', num1)) num1_a , MIN(DECODE(cd, 'A', num2)) num2_a , MIN(DECODE(cd, 'A', num3)) num3_a , MIN(DECODE(cd, 'A', num4)) num4_a , MIN(DECODE(cd, 'A', num5)) num5_a , MIN(DECODE(cd, 'B', num1)) num1_b , MIN(DECODE(cd, 'B', num2)) num2_b , MIN(DECODE(cd, 'B', num3)) num3_b , MIN(DECODE(cd, 'B', num4)) num4_b , MIN(DECODE(cd, 'B', num5)) num5_b FROM t GROUP BY dt ; WITH t AS ( SELECT 'A' cd, '20190212' dt, 10 num1, 20 num2, 30 num3, 40 num4, 50 num5 FROM dual UNION ALL SELECT 'B', '20190212', 10, 20, 30, 40, 50 FROM dual ) SELECT * FROM t PIVOT ( MIN(num1) num1 , MIN(num2) num2 , MIN(num3) num3 , MIN(num4) num4 , MIN(num5) num5 FOR cd IN ('A' a, 'B' b) ) ;