单个字段中的多行由逗号SQL Server分隔

时间:2012-07-29 16:00:09

标签: sql sql-server tsql

  

可能重复:
  Simulating group_concat MySQL function in MS SQL Server 2005?

实现此结果的SQL Server代码是什么:

SO number  Line number            
123           6
123          189
456           34

需要输出:

SO number  Line number 
 123            6,189
 456               34   

2 个答案:

答案 0 :(得分:4)

试试这个: -

CREATE TABLE #Sample ([SO Number] INT, [Line Number] INT)

INSERT INTO #Sample ([SO Number],[Line Number]) VALUES (123,6)
INSERT INTO #Sample ([SO Number],[Line Number]) VALUES (123,189)
INSERT INTO #Sample ([SO Number],[Line Number]) VALUES (456,34)


SELECT ID,
STUFF((
SELECT ', ' + cast([Line Number] as varchar(max) )
FROM #Sample 
WHERE ([SO Number] = a.[SO Number]) 
FOR XML PATH (''))
,1,2,'') AS b
FROM #Sample a
GROUP BY [SO Number]

编辑:

XML PATH (''):Is used to retrieve the column values seperated by comma 
Ex:- ,6,189,34

STUFF:用于将字符串插入另一个字符串。表达式为

STUFF ( character_expression , start , length ,character_expression )

起始长度为1,因为我们必须替换XML PATH创建的第一个逗号。     正在插入的空间''的长度为1

因此,即使您有20K行,表达式也将保持相同,因为1,2用于插入空格

答案 1 :(得分:0)

DECLARE @Sample Table([SO Number] INT, [Line Number] INT)

INSERT INTO @Sample ([SO Number],[Line Number]) VALUES (123,6)
INSERT INTO @Sample ([SO Number],[Line Number]) VALUES (123,189)
INSERT INTO @Sample ([SO Number],[Line Number]) VALUES (456,34)

select * from @Sample

select [SO Number],STUFF((select ','+cast([Line Number] as varchar(100)) from  @Sample s1 where s1.[SO Number] =s.[SO Number]  FOR XML path('')),1,1,'' )  as [Line Number]     from  @Sample s
group by [SO Number]