피벗..? 쿼리 질문드립니다 10g 0 5 4,409

by ZeTT [SQL Query] 피벗 pivot [2012.08.07 16:39:55]


WITH T AS (
  SELECT 'A' NM, '가' STR FROM DUAL UNION ALL
  SELECT 'A' NM, '나' STR FROM DUAL UNION ALL
  SELECT 'A' NM, '다' STR FROM DUAL UNION ALL
  SELECT 'B' NM, '가' STR FROM DUAL UNION ALL
  SELECT 'B' NM, '나' STR FROM DUAL UNION ALL
  SELECT 'B' NM, '다' STR FROM DUAL UNION ALL
  SELECT 'B' NM, '라' STR FROM DUAL UNION ALL
  SELECT 'C' NM, '가' STR FROM DUAL UNION ALL
  SELECT 'C' NM, '나' STR FROM DUAL UNION ALL
  SELECT 'C' NM, '다' STR FROM DUAL UNION ALL
  SELECT 'C' NM, '라' STR FROM DUAL UNION ALL
  SELECT 'D' NM, '가' STR FROM DUAL UNION ALL
  SELECT 'D' NM, '나' STR FROM DUAL
)

SELECT DECODE(NM,'A',STR) AS A
  ,DECODE(NM,'B',STR) AS B
  ,DECODE(NM,'C',STR) AS C
  ,DECODE(NM,'D',STR) AS D
FROM T;




피벗 하려다가 실패했는데요...
A B C D
가 가 가 가
나 나 나 나
다 다 다 (널)
(널) 라 라 (널)

이렇게 보여주고싶은데 어떻게 하면될까요?



   
           
by 마농 [2012.08.07 16:58:49]
SELECT MIN(DECODE(nm, 'A', str)) a
     , MIN(DECODE(nm, 'B', str)) b
     , MIN(DECODE(nm, 'C', str)) c
     , MIN(DECODE(nm, 'D', str)) d
  FROM t
 GROUP BY str
 ORDER BY str
;

by ZeTT [2012.08.07 17:05:11]

우와....GROUP BY 를 STR 로 하면 되는거네요 ㅠㅠ
왜 STR 로 하면 잘나오고
 GROUP BY MIN(DECODE(NM,'A',STR)), MIN(DECODE(NM,'B',STR)).....
로 하면 안되는건지 알수있을까요?ㅠ
GROUP BY 를 항상 SELECT 절에 있는거 잡아다 넣는건줄 알고잇어서...

by 손님 [2012.08.07 17:22:35]
MIN은 집계함수입니다.
집계함수는 그룹핑된 데이터를 보여주기 위해서 SELECT절이나 또는 HAVING절에 사용할수 있습니다.

by 손님 [2012.08.08 09:20:49]

WITH T AS ( SELECT 'A' NM, '1' NUM FROM DUAL UNION ALL SELECT 'B' NM, '2' NUM FROM DUAL UNION ALL SELECT 'C' NM, '3' NUM FROM DUAL UNION ALL SELECT 'D' NM, '4' NUM FROM DUAL UNION ALL SELECT 'E' NM, '5' NUM FROM DUAL ) SELECT MAX(DECODE(NM,'A',NUM)) A ,MAX(DECODE(NM,'B',NUM)) B ,MAX(DECODE(NM,'C',NUM)) C ,MAX(DECODE(NM,'D',NUM)) D ,MAX(DECODE(NM,'E',NUM)) E FROM T

by ZeTT [2012.08.08 09:42:51]

이 쿼리에서는 GROUP BY를 안쓰고 해도 MAX로 한줄만 표시되서 이해하기 쉬웠는데
'가', '나', '다' 같이 여러개의 데이터가 모두 보이게 하는부분은...잘 이해가 안되네요 ㅠ
자세히 설명좀 부탁드립니다~

WITH T AS (
     SELECT 'A' NM, '1' NUM FROM DUAL UNION ALL
     SELECT 'B' NM, '2' NUM FROM DUAL UNION ALL
     SELECT 'C' NM, '3' NUM FROM DUAL UNION ALL
     SELECT 'D' NM, '4' NUM FROM DUAL UNION ALL
     SELECT 'E' NM, '5' NUM FROM DUAL
    )
    SELECT MAX(DECODE(NM,'A',NUM)) A
        ,MAX(DECODE(NM,'B',NUM)) B
        ,MAX(DECODE(NM,'C',NUM)) C
        ,MAX(DECODE(NM,'D',NUM)) D
        ,MAX(DECODE(NM,'E',NUM)) E
    FROM T
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입