2014. 2. 13. 14:23 IT/MSSQL

MSSQL STUFF, FOR XML PATH

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

STUFF 와 FOR XML PATH  테스트 !

CREATE TABLE #TABLE1 (T1_ID INT)

CREATE TABLE #TABLE2 (T2_ID INT, T1_ID INT)


INSERT INTO #TABLE1 VALUES(1) -- 테이블 생성
INSERT INTO #TABLE1 VALUES(2)

INSERT INTO #TABLE2 VALUES(1, 1) -- 테이블 값 생성
INSERT INTO #TABLE2 VALUES(2, 1)
INSERT INTO #TABLE2 VALUES(3, 1)
INSERT INTO #TABLE2 VALUES(4, 2)
INSERT INTO #TABLE2 VALUES(5, 2)
INSERT INTO #TABLE2 VALUES(6, 2)


SELECT * FROM #TABLE1 -- 테스트 준비 완료
SELECT * FROM #TABLE2


테스트 시작 - TABLE2의 데이터를 한 ROW로 나타냄 : 결과

 SELECT  T3.T1_ID,
 STUFF(
(
SELECT ',' + CAST(T2.T2_ID AS CHAR)
FROM #TABLE1 AS T1 
        INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID  
WHERE T1.T1_ID = T3.T1_ID
GROUP BY T2.T2_ID, T2.T1_ID
ORDER BY T2.T1_ID
FOR XML PATH('') 
)
 , 1, 1, '') AS T2_ID
 FROM #TABLE1 AS T3
 WHERE T3.T1_ID IN (1,2)
 GROUP BY T3.T1_ID

 


STUFF 제거 : 앞에 , 살아남

 SELECT T3.T1_ID,
 --STUFF(
 (
SELECT ',' + CAST(T2.T2_ID AS CHAR)
FROM #TABLE1 AS T1 
        INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID  
WHERE T1.T1_ID = T3.T1_ID
GROUP BY T2.T2_ID, T2.T1_ID
ORDER BY T2.T1_ID
FOR XML PATH('')
AS T2_ID 
 --  , 1, 1, '') AS T2_ID
 FROM #TABLE1 AS T3
 WHERE T3.T1_ID IN (1,2)
 GROUP BY T3.T1_ID

 


 실제 여러 ROW의 데이터를 ,로 구분하는 역할은 FOR XML PATH('') 가 수행한다.

안의 SELECT 쿼리 테스트 결과 

 SELECT ',' + CAST(T2.T2_ID AS VARCHAR) AS T2_ID
 FROM #TABLE1 AS T1
 INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID 
 --WHERE T1.T1_ID = T3.T1_ID
 GROUP BY T2.T2_ID, T2.T1_ID
 ORDER BY T2.T1_ID

 


 SELECT ',' + CAST(T2.T2_ID AS VARCHAR)
 FROM #TABLE1 AS T1 
 INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID
 --WHERE T1.T1_ID = T3.T1_ID
 GROUP BY T2.T2_ID, T2.T1_ID
 ORDER BY T2.T1_ID
 FOR XML PATH('')

 



 SELECT ',' + CAST(T2.T2_ID AS VARCHAR)  AS TAG
 FROM #TABLE1 AS T1 
 INNER JOIN #TABLE2 AS T2 ON T1.T1_ID = T2.T1_ID 
 --WHERE T1.T1_ID = T3.T1_ID
 GROUP BY T2.T2_ID, T2.T1_ID
 ORDER BY T2.T1_ID
 FOR XML PATH('')


- STUFF

STUFF(문자열, 시작위치, 변경할 문자길이, 변경할 문자)

EX) STUFF('ABCDEF', 2, 2 , 'abc') => 'AabcDEF'
두번째부터 시작하여, 2 길이의 문자를 abc로 변경

Posted by 당양부부34

블로그 이미지
주요 토렌트를 블로깅하고 있습니다. 토렌트 순위 등은 다른 사이트를 찾아보세요. 주요 웹툰 순위도 게재했어요 경제를 좋아하는 일산의 행복한 프로그래머입니다.
당양부부34
Yesterday
Today
Total

달력

 « |  » 2024.3
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함