안녕하세요~
크로스탭이라고 말해야 될지는 모르겠습니다만..
행에 있는 데이터를 각각의 컬럼으로 변경시켜야 합니다.
gubun name
마켓 김개똥
마켓 김말똥
편의점 소개똥
마켓 니똥내똥
데이터가 이렇게 있을경우에 출력되어야 하는 화면은
마켓 편의점
김개똥 소개똥
김말똥 null
니똥내똥 null
이렇게 출력되게 하고 싶은데 쿼리문을 어떻게 작성해야 할까요??
Case문을 써서 해보니 - CASE WHEN gubun='마켓' THEN name END, CASE WHEN gubun='편의점' THEN name END
마켓 편의점
김개똥 null
김말똥 null
니똥내똥 null
null 소개똥
이렇게 행이 한 줄 더 나오더라구요..이렇게 나오면 안되는데..부탁드리겠습니다.
감사합니다.
Comment 4
-
항해자™
2015.02.05 11:20
-
클리티에
2015.02.05 11:46
pivot함수는 2000에서는 지원하지 않는것으로 알고 있어서요...ㅠ_ㅠ
-
hexcat
2015.02.05 13:20
DECLARE @TAB TABLE(
GUBUN VARCHAR(8)
,NAME VARCHAR(8)
)INSERT INTO @TAB
VALUES ('마켓', '김개똥'), ('마켓', '김말똥'), ('편의점', '소개똥'), ('마켓', '니똥내똥')SELECT MAX(T.Item1) AS "마켓"
,MAX(T.Item2) AS "편의점"
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY GUBUN ORDER BY (SELECT NULL)) AS SEQ
,CASE WHEN gubun='마켓' THEN name END AS Item1
,CASE WHEN gubun='편의점' THEN name END AS Item2
FROM @TAB
) T
GROUP BY T.SEQORDER BY T.SEQ
이렇게 하면 나오긴 합니다............
-
건우아빠
2015.02.05 14:25
mssql2000
/*
select *
into #test
from ( select '마켓' gubun ,'김개똥' name union all
select '마켓' ,'김말똥' union all
select '편의점' ,'소개똥' union all
select '마켓' ,'니똥내똥') a
*/
select ra.seq
, MAX(CASE WHEN gubun='마켓' THEN name END) [마켓]
, MAX(CASE WHEN gubun='편의점' THEN name END) [편의점]
from (
select a.gubun, a.name , sum(1) seq
from #test a join #test b on a.gubun = b.gubun and a.name >= b.name
group by a.gubun, a.name ) ra
group by ra.seq
이 게시판에서 pivot 으로 검색해 보세요. 자료가 상당히 많습니다.