복붙노트

[SQL] 오라클 SQL 피벗 쿼리

SQL

오라클 SQL 피벗 쿼리

아래와 같이 나는 테이블에 데이터가 :

MONTH VALUE

1     100
2     200
3     300
4     400
5     500
6     600

그 결과는 다음과 같이 주어진다 그래서 나는 SQL 쿼리를 작성하려면 :

MONTH_JAN MONTH_FEB MONTH_MAR MONTH_APR MONTH_MAY MONTH_JUN
100       200       300       400       500       600

해결법

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

    1.

    SELECT SUM(CASE WHEN t.month = 1 THEN t.value ELSE 0 END) AS JAN,
           SUM(CASE WHEN t.month = 2 THEN t.value ELSE 0 END) AS FEB,
           SUM(CASE WHEN t.month = 3 THEN t.value ELSE 0 END) AS MAR,
           SUM(CASE WHEN t.month = 4 THEN t.value ELSE 0 END) AS APR,
           SUM(CASE WHEN t.month = 5 THEN t.value ELSE 0 END) AS MAY,
           SUM(CASE WHEN t.month = 6 THEN t.value ELSE 0 END) AS JUN
      FROM YOUR_TABLE t
    

    당신은 두 개의 열을 표시 -이 같은 아마 올해로 그룹화해야합니다.

    이 ANSI PIVOT (및 UNPIVOT) 구문은, 그러나 오라클은 11g까지를 지원하지 않았다. 이전 9i에, 당신은 오라클 특정의 DECODE와 CASE 문을 교체해야 할 것입니다.

  2. ==============================

    2.오라클 11g로, 이제 그 결과를 달성하기 위해 PIVOT 연산자를 사용할 수 있습니다 :

    오라클 11g로, 이제 그 결과를 달성하기 위해 PIVOT 연산자를 사용할 수 있습니다 :

    create table tq84_pivot (
      month number,
      value number
    );
    
    insert into tq84_pivot values(1, 100);
    insert into tq84_pivot values(2, 200);
    insert into tq84_pivot values(3, 300);
    insert into tq84_pivot values(4, 400);
    insert into tq84_pivot values(5, 500);
    insert into tq84_pivot values(6, 600);
    --
    insert into tq84_pivot values(1, 400);
    insert into tq84_pivot values(2, 350);
    insert into tq84_pivot values(4, 150);
    
    select 
      *
    from
      tq84_pivot
    pivot (
       sum (value) as sum_value for
         (month) in (1 as month_jan,
                     2 as month_feb,
                     3 as month_mar,
                     4 as month_apr,
                     5 as month_mai,
                     6 as month_jun,
                     7 as month_jul,
                     8 as month_aug,
                     9 as month_sep,
                    10 as month_oct,
                    11 as month_nov,
                    12 as month_dec)
    );
    
  3. from https://stackoverflow.com/questions/4841718/oracle-sql-pivot-query by cc-by-sa and MIT license