수직을 수평구조로 변경 0 5 1,975

by 초짜 [SQL Query] [2013.01.03 15:27:41]



a1 a2 jumsu 사람
1  1 10    김1
1   2 8 김1
1   1  8     김2
1   2 7 김2
1   1  10   김3
1   2  9    김3

위와같은구조를

1 1   10   8  10
1  2   8    7   9 형태로 볼려고 하는데요
어떻게 해야하는지요 초짜라 갈피를 못잡겠습니다.
by 아발란체 [2013.01.03 15:56:05]
WITH T(a1, a2, jumsu, name) AS (
  SELECT '1','1','10','김1' FROM DUAL UNION ALL
  SELECT '1','2','8','김1' FROM DUAL UNION ALL
  SELECT '1','1','8','김2' FROM DUAL UNION ALL
  SELECT '1','2','7','김2' FROM DUAL UNION ALL
  SELECT '1','1','10','김3' FROM DUAL UNION ALL
  SELECT '1','2','9','김3' FROM DUAL
)
SELECT 
  a1,
  a2,
  MAX(DECODE(gn, 1, jumsu)) AS val1,
  MAX(DECODE(gn, 2, jumsu)) AS val2,
  MAX(DECODE(gn, 3, jumsu)) AS val3
FROM (
  SELECT
    T.*,
    ROW_NUMBER() OVER(PARTITION BY A1, A2 ORDER BY ROWNUM) AS gn
  FROM
    T
)
GROUP BY
  a1, a2
ORDER BY
  a2, a2

by 마농 [2013.01.03 15:57:41]
SELECT a1, a2
     , MIN(DECODE(사람, '김1', jumsu)) 김1
     , MIN(DECODE(사람, '김2', jumsu)) 김2
     , MIN(DECODE(사람, '김3', jumsu)) 김3
  FROM t1
 GROUP BY a1, a2
 ORDER BY a1, a2
;

by 초짜 [2013.01.03 16:11:02]

마농님도 의견도 좋은데 아발란체님이 제시한 SQL이 제가 가고자 하는 방향고 맞고 먼저 댓글을 달아주셔서 채택합니다 항상 두분의 실력에 감탄드립니다.

by 마농 [2013.01.03 16:16:17]

예제를 보면 정렬이 잘 되어 있어 문제 없을 수도 있으나..
데이터는 항상 정렬되어 있지 않습니다.
이런 류의 문제에서는 정렬순서 기준이 명확해야 하는데요..
저는 이름이 고정일 경우로 답글 달았지만 고정이 아닐 경우라면 정렬기준을 정해야 합니다.
rownum 이 기준이 되면 안될 듯 합니다.
다른 기준으로 정렬 하시는게 좋아 보입니다.


by 아발란체 [2013.01.03 17:13:30]

마농님과 저를 비교하시면 안됨... 부끄럽습니다.
마농님은 저에게 신임..
Oh my god~ !!

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