SQL 2005 에서 여러 줄 을 합 쳐 기록 하 는 방법 을 모 았 습 니 다.

5393 단어 sql
--1.    ,      

CREATE TABLE tb(id int, [value] varchar(10))

INSERT tb SELECT 1, 'aa'

union     ALL SELECT 1, 'bb'

union     ALL SELECT 2, 'aaa'

union     ALL SELECT 2, 'bbb'

union     ALL SELECT 2, 'ccc'



--SELECT * FROM tb

/**//*

id value

----------- ----------

1 aa

1 bb

2 aaa

2 bbb

2 ccc



(5 row(s) affected)

*/



--2  SQL2005    

----2.1   OUTER APPLY

SELECT * 

FROM (SELECT DISTINCT id FROM tb) A OUTER APPLY(

SELECT [values]= STUFF(REPLACE(REPLACE(

(

SELECT value FROM tb N

WHERE id = A.id

FOR XML AUTO

), '<N value="', ','), '"/>', ''), 1, 1, '')

)N



----2.2   XML

SELECT id, [values]=STUFF((SELECT ','+[value] FROM tb t WHERE id=tb.id FOR XML PATH('')), 1, 1, '')

FROM tb

GROUP BY id

--3  SQL2000          

----3.1       fn_strSum,  id  value 

GO

CREATE FUNCTION dbo.fn_strSum(@id int)

RETURNS varchar(8000)

AS

BEGIN

DECLARE @values varchar(8000)

SET @values = ''

SELECT @values = @values + ',' + value FROM tb WHERE id=@id

RETURN STUFF(@values, 1, 1, '')

END

GO



--     

SELECT id, VALUE = dbo.fn_strSum(id) FROM tb GROUP BY id

DROP FUNCTION dbo.fn_strSum



----3.2       fn_strSum2,  id  value 

GO

CREATE FUNCTION dbo.fn_strSum2(@id int)

RETURNS varchar(8000)

AS

BEGIN

DECLARE @values varchar(8000) 

SELECT @values = isnull(@values + ',', '') + value FROM tb WHERE id=@id

RETURN @values

END

GO



--     

SELECT id, VALUE = dbo.fn_strSum2(id) FROM tb GROUP BY id

DROP FUNCTION dbo.fn_strSum2

좋은 웹페이지 즐겨찾기