안녕하세요~ 고수님들 쿼리문 질문 하나 드릴께요
몇시간째 고민을 해보고 있는데 답이 떠오르지 않네요
1. 원본 데이터
BoxName | Item
KBox A
KBox B
KBox C
KBox D
JBox 1
JBox 2
JBox 3
JBox 4
CBox 가
CBox 나
CBox 다
CBox 라
2. 변경 데이터
BoxName | Item
KBox | A,B,C,D
JBox | 1,2,3,4
CBox | 가,나,다,라
1번형태의 데이터를 2번형태의 데이터로 변경하는 쿼리문 입니다.
조언좀 부탁 드리겠습니다. 감사합니다.
-----------------------------------------------------------------------------------------
--테이블생성 스크립트
-----------------------------------------------------------------------------------------
CREATE TABLE BoxItem
(
BoxName nvarchar(50)
, Item char(2)
)
go
INSERT INTO BoxItem(BoxName,Item) VALUES('KBox','A')
INSERT INTO BoxItem(BoxName,Item) VALUES('KBox','B')
INSERT INTO BoxItem(BoxName,Item) VALUES('KBox','C')
INSERT INTO BoxItem(BoxName,Item) VALUES('KBox','D')
INSERT INTO BoxItem(BoxName,Item) VALUES('JBox','1')
INSERT INTO BoxItem(BoxName,Item) VALUES('JBox','2')
INSERT INTO BoxItem(BoxName,Item) VALUES('JBox','3')
INSERT INTO BoxItem(BoxName,Item) VALUES('JBox','4')
INSERT INTO BoxItem(BoxName,Item) VALUES('CBox','가')
INSERT INTO BoxItem(BoxName,Item) VALUES('CBox','나')
INSERT INTO BoxItem(BoxName,Item) VALUES('CBox','다')
INSERT INTO BoxItem(BoxName,Item) VALUES('CBox','라')
Comment 6
-
처리짱
2013.07.30 17:33
-
건우아빠
2013.07.30 17:40
SQL 사용자 Tip & 강좌 에서 구분자로 조회해 보세요...
-
심연이다
2013.07.30 17:48
빠른 답변 감사드립니다~~
처리짱님 덕분에 잘 해결되었습니다.
-
심연이다
2013.07.30 17:57
헉!! SQL 사용자 Tip & 강좌 에는 더욱 심플하고 멋진 방법이 있네요~
암튼 오늘 잘 배우고 갑니다. 감사합니다.
-
등빛
2014.07.17 14:28
select distinct
STUFF(
(SELECT ',' + BoxName AS [text()] FROM BoxItem b WHERE b.BoxName = a.BoxName FOR XML PATH(''))
, 1, 1, ''
) AS boxname,
STUFF(
(SELECT ',' + Item AS [text()] FROM BoxItem b WHERE b.BoxName = a.BoxName FOR XML PATH(''))
, 1, 1, ''
) AS item
from BoxItem as a
공부복습겸 댓글달아요 -
한태
2016.03.10 19:52
;with cteas(select boxname, item, ROW_NUMBER()over(partition by boxname order by item) rnfrom BoxItem)select boxname,MAX( CASE rn WHEN 1 THEN Item ELSE '' END ) + ', ' +MAX( CASE rn WHEN 2 THEN Item ELSE '' END ) + ', ' +MAX( CASE rn WHEN 3 THEN Item ELSE '' END ) + ', ' +MAX( CASE rn WHEN 4 THEN Item ELSE '' END )from ctegroup by BoxName사용자 tip에 있는 내용 확인하며 작성하였습니다.
함수를 이용해야 할거 같은데요..
SELECT BoxName, dbo.GetFunc(BoxName)
fROM BoxItem
GROUP BY BoxName
alter FUNCTION [dbo].GetFunc
(
@BoxName nvarchar(50)
)
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @ret NVARCHAR(100)
SELECT @ret = COALESCE(@ret+ ',' + Item, Item)
FROM BoxItem WITH(NOLOCK)
WHERE BoxName = @BoxName
RETURN @ret
END
함수를 이용하지 않는 방법은 다른 고수님께서...