dbs/Oracle

PIVOT Query

풍경햏 2018. 10. 22. 22:08

Above 11g

with testdata as
(
    select 'Fred' First_Name, 10 Items from dual
    union
    select 'John' First_Name, 5  Items from dual
    union
    select 'Jane' First_Name, 12 Items from dual
    union
    select 'Fred' First_Name, 15 Items from dual
)
select FRED_ITMSUM "Fred's Sum", FRED_ITMCNT "Fred's Count"
     , JOHN_ITMSUM "John's Sum", JOHN_ITMCNT "John's Count"
     , JANE_ITMSUM "Janes's Sum", JANE_ITMCNT "Janes's Count"
from testdata
pivot (
    sum(Items) itmsum,
    count(Items) itmcnt
    for First_Name
    in ('Fred' as fred,'John' as john,'Jane' as jane)
)



WITH T AS(
    SELECT '홍길동' 성명, 140 일월, 120 이월 FROM DUAL UNION ALL
    SELECT '김철수' 성명, 210 일월, 220 이월 FROM DUAL
)
SELECT * FROM T
UNPIVOT(급여 FOR 월 IN(일월, 이월))

WITH T AS(
    SELECT '1월' 월, '홍길동' 성명, 110 급여 FROM DUAL UNION ALL
    SELECT '1월' 월, '홍길동' 성명, 30 급여 FROM DUAL UNION ALL
    SELECT '1월' 월, '이상현' 성명, 210 급여 FROM DUAL UNION ALL
    SELECT '1월' 월, '김성현' 성명, 200 급여 FROM DUAL UNION ALL
    SELECT '2월' 월, '김성현' 성명, 120 급여 FROM DUAL UNION ALL
    SELECT '2월' 월, '이상현' 성명, 220 급여 FROM DUAL
)
SELECT *
  FROM T
 PIVOT ( SUM(급여) FOR 월 IN ('1월','2월'))

WITH T AS
(
 SELECT CHR(LEVEL + 64) C
      , LEVEL V
   FROM DUAL
connect by LEVEL <= 10
)
 SELECT *
   FROM (
         SELECT C
              , TO_CHAR(V) V
           FROM T  
        )
UNPIVOT ( V FOR GB2 IN (C AS 1, V AS 2)

WITH T AS
(
 SELECT CHR(LEVEL + 64) C
      , LEVEL V
   FROM DUAL
CONNECT BY LEVEL <= 10
)
SELECT *
  FROM (
        SELECT C
             , V
          FROM T
       )
 PIVOT ( MIN(C) FOR V IN(1 V1, 2 V2, 3 V3, 4 V4, 5 V5, 6 V6, 7 V7, 8 V8, 9 V9, 10 V10))