복붙노트

[SQL] 오라클 11g - 피벗 해제

SQL

오라클 11g - 피벗 해제

나는이 같은 테이블이

Date        Year    Month   Day     Turn_1  Turn_2  Turn_3
28/08/2014  2014    08      28      Foo     Bar     Xab

그리고 나는이 같은에서 "회전"을 싶습니다

Date        Year    Month   Day     Turn    Source
28/08/2014  2014    08      28      Foo     Turn_1
28/08/2014  2014    08      28      Bar     Turn_2
28/08/2014  2014    08      28      Xab     Turn_3  

내가 말을 다른 테이블이 결과에 가입해야하기 때문에 나는 "소스"열이 필요합니다 :

Source  Interval
Turn_1  08 - 18
Turn_2  11 - 20
Turn_3  18 - 24

지금 나는 테이블을 회전 사용 UNPIVOT을 가지고 있지만 (가능한 경우와) 나는 "소스"열을 표시하는 방법을 잘 모릅니다 :

select dt_date, df_year, df_month, df_turn
  from my_rotatation_table 
       unpivot( df_turn
                 for x in(turn_1, 
                          turn_2, 
                          turn_3
              ))

해결했다

select dt_date, df_year, df_month, df_turn, df_source
  from my_rotatation_table 
       unpivot( df_turn
                 for df_source in(turn_1 as 'Turn_1', 
                          turn_2 as 'Turn_2', 
                          turn_3 as 'Turn_3'
              ))

해결법

  1. ==============================

    1.이 쿼리를 사용합니다 :

    이 쿼리를 사용합니다 :

    with t (Dat, Year, Month, Day, Turn_1, Turn_2, Turn_3) as (
      select sysdate, 2014, 08, 28, 'Foo', 'Bar', 'Xab' from dual
    )
    select dat, year, month, day, turn, source from t
    unpivot (
      source  for turn in (Turn_1, Turn_2, Turn_3)
    )
    
    DAT         YEAR    MONTH   DAY TURN    SOURCE
    ----------------------------------------------
    08/01/2014  2014    8       28  TURN_1  Foo
    08/01/2014  2014    8       28  TURN_2  Bar
    08/01/2014  2014    8       28  TURN_3  Xab
    
  2. from https://stackoverflow.com/questions/25077011/oracle-11g-unpivot by cc-by-sa and MIT license