单个字段中的多行由逗号分隔SQL Server
可能重复:单个字段中的多行由逗号分隔SQL Server,sql,sql-server,tsql,Sql,Sql Server,Tsql,可能重复: 实现此结果的SQL Server代码是什么: SO number Line number 123 6 123 189 456 34 所需输出: SO number Line number 123 6,189 456 34 试试这个:- CREATE TABLE #Sample ([SO Number] INT, [Line Numb
实现此结果的SQL Server代码是什么:
SO number Line number
123 6
123 189
456 34
所需输出:
SO number Line number
123 6,189
456 34
试试这个:-
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 ( character_expression , start , length ,character_expression )
起始长度为1,因为我们必须替换由XML路径创建的第一个逗号。
正在插入的空格'
的长度为1
因此,即使有20K行,表达式仍将与1相同,2用于插入空格请尝试以下操作:-
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]
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]
编辑:
XML PATH (''):Is used to retrieve the column values seperated by comma
Ex:- ,6,189,34
:用于将字符串插入另一个字符串。表达式为
STUFF ( character_expression , start , length ,character_expression )
起始长度为1,因为我们必须替换由XML路径创建的第一个逗号。
正在插入的空格'
的长度为1
因此,即使有20K行,表达式仍将保持与1相同,2用于插入空格这个问题是如此令人难以置信的重复。谷歌搜索“SQL Server concat aggregate”必须返回无限量的结果。我想group_concat仅用于MYSQL?不是吗?@User156175:是的,
group_concat
是一个MYSQL函数。SQL Server没有直接等效项。这就是为什么另一个问题是关于在SQL Server中模拟该函数的。这个问题是如此令人难以置信的重复。谷歌搜索“SQL Server concat aggregate”必须返回无限量的结果。我想group_concat仅用于MYSQL?不是吗?@User156175:是的,group_concat
是一个MYSQL函数。SQL Server没有直接等效项。这就是为什么另一个问题是关于在SQL Server中模拟该函数的。我认为这是一个愚蠢的疑问。但我对SQL不是很在行。我的实际数据超过20000行。如果是这样,我将如何编写1,2',。这就是给定代码的第7行应该如何修改?@user156175:更新了我的答案。!!我认为这是一个愚蠢的怀疑。但我对sql不是很在行。我的实际数据超过20000行。如果是这样,我将如何编写1,2',。这就是您给定代码的第7行应该如何修改?@user156175:更新了我的答案。!!
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]