tibero 특정 컬럼 을 비교 후 세로데이터 가로데이터로 0 2 725

by 은꿈 [SQL Query] [2019.02.12 17:32:53]


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인 데이터를 한줄로 표현하고 싶습니다.

 

 

 

by 마농 [2019.02.12 17:40:57]

기존 집합이 원본 테이블 그대로 인가요? 아니면 쿼리로 가공된 결과인가요?
가공된 결과라면? 원본집합 또는 가공 쿼리를 보여주세요.
가공한 걸 다시 가공하는 것 보다는 아예 한번에 처리하는게 더 좋습니다.
그런데 num3 이 두개네요?


by 마농 [2019.02.12 19:15:24]
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)
       )
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입