복붙노트

[SQL] 오라클 피벗 연산자

SQL

오라클 피벗 연산자

나는 오라클 피벗 새로운 오전. 이것이 가능한가?

나는 두 개의 열 유형과 가치를 가지고

type     value
---------------
a        a1
b        b1
c        c1
etc

나는 모든 단일 행에, 이런 식으로 뭔가를 얻을 수있을 것인가?

a   b    c 
a1  b1   c1

이 같은 쿼리를 시도에 나는이 같은 출력을 얻고있다

  select A,B from tbl
  pivot (max(value) for type in ('a' as A,'b' as B))

  ------------------------------------
    A    B
   null  b1
   a1    null

감사

해결법

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

    1.당신은 아마도 고유 행과 피벗 연산자를 식별하는 열 (예를 들어 기본 키 열)를 포함하는 테이블 (당신의 TBL 테이블)에 대한 당신이 발행하는 간단하기 때문에 선택 문 같은 출력이 해당 열을 고려한 값으로한다 얻고있다. 다음은 간단한 예이다 :

    당신은 아마도 고유 행과 피벗 연산자를 식별하는 열 (예를 들어 기본 키 열)를 포함하는 테이블 (당신의 TBL 테이블)에 대한 당신이 발행하는 간단하기 때문에 선택 문 같은 출력이 해당 열을 고려한 값으로한다 얻고있다. 다음은 간단한 예이다 :

    /*assume it's your table tbl */
    with tbl(unique_col, col1, col2) as(
      select 1, 'a',  'a1' from dual union all
      select 2, 'b',  'b1' from dual union all
      select 3, 'c',  'c1' from dual
    )
    

    같은 테이블에 대해 쿼리는 당신에게 당신이 질문에 제공되는 출력 (바람직하지 않은 결과를) 제공합니다 :

    select A,B 
      from tbl
    pivot(
      max(col2) for col1 in ('a' as A,'b' as B)
    )
    

    결과:

    A    B
    --   --
    a1   null   
    null b1
    

    원하는 출력을 생성하기 위해, 당신은 행에 대한 고유 한 값을 가진 열을 제외해야 :

    select A
         , B 
      from (select col1 
                 , col2  /*selecting only those columns we are interested in*/
               from tbl ) 
      pivot(
        max(col2) for col1 in ('a' as A,'b' as B)
      )
    

    결과:

    A  B
    -- --
    a1 b1 
    
  2. ==============================

    2.이 같은:

    이 같은:

    SELECT a, b, c
      FROM tbl
     PIVOT
     (
       MAX(Value) FOR Type IN ('a' as a, 
                               'b' as b, 
                               'c' as c)
     )
    

    자세한 내용은이 문서를 참조 할 수 있습니다.

  3. from https://stackoverflow.com/questions/19280591/oracle-pivot-operator by cc-by-sa and MIT license