Pivot 구문을 작성해서 실행 결과를 얻었지만 아직 이해가 안갑니다. 1 1 1,296

by 안떠니 [SQL Query] [2018.11.06 14:30:08]


몇개월 전에 Pivot 구문을 답변으로 받았고, 그 코드를 바탕으로 다른 Pivot 을 작성했습니다.

결과는 원하는대로 나왔지만, 아직도 원리를 이해 못하고 있습니다.

혹시 설명해 주실 분?

 

WITH sales(t_cd, bin, game) AS
(
          SELECT 10003202, 1, 331 FROM dual
UNION ALL SELECT 10003202, 2, 431 FROM dual
UNION ALL SELECT 10003202, 3, 531 FROM dual
UNION ALL SELECT 10003202, 4, 631 FROM dual
UNION ALL SELECT 10003202, 5, 731 FROM dual
UNION ALL SELECT 10003202, 6, 732 FROM dual
UNION ALL SELECT 90000202, 1, 101 FROM dual
UNION ALL SELECT 90000202, 2, 202 FROM dual
UNION ALL SELECT 90000202, 3, 303 FROM dual
UNION ALL SELECT 90000202, 4, 404 FROM dual
UNION ALL SELECT 90000202, 5, 505 FROM dual
UNION ALL SELECT 90000202, 6, 606 FROM dual
)
SELECT *
  FROM sales
 PIVOT (MIN(game) FOR bin IN (   1,   2,   3,   4,   5,   6 ) )
 ORDER BY t_cd
;

각 1,2,3,4,5,6 를 컬럼으로 나열하고 각각의 컬럼의 값으로 game 필드의 값을 나열하는.

그런데, PIVOT 구문이 어떻게 작동하는지 잘 이해가 안되네요.

 

by 마농 [2018.11.06 15:21:16]

bin 을 기준으로 game 이 아래로 나열되어 있다면
PIVOT 을 하면 bin 을 기준으로 game 이 옆으로 나열되는 거죠.
PIVOT 에 표기 하지 않은 항목(t_cd)은 Group By 의 기준이 됩니다.
11G Pivot 구문이 생기기 전에는 다음과 같이 작성했습니다. 비교해 보세요.
 

SELECT t_cd
     , MIN(DECODE(bin, 1, game)) "1"
     , MIN(DECODE(bin, 2, game)) "2"
     , MIN(DECODE(bin, 3, game)) "3"
     , MIN(DECODE(bin, 4, game)) "4"
     , MIN(DECODE(bin, 5, game)) "5"
     , MIN(DECODE(bin, 6, game)) "6"
  FROM sales
 GROUP BY t_cd
;

 

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