我想在SQL Server中创建一个表值函数,我想用逗号分隔值返回数据。多行到一个逗号分隔值
例如表:tbl
ID | Value
---+-------
1 | 100
1 | 200
1 | 300
1 | 400
现在,当我使用函数执行查询Func1(value)
SELECT Func1(Value)
FROM tbl
WHERE ID = 1
输出,我希望是:100,200,300,400
我想在SQL Server中创建一个表值函数,我想用逗号分隔值返回数据。多行到一个逗号分隔值
例如表:tbl
ID | Value
---+-------
1 | 100
1 | 200
1 | 300
1 | 400
现在,当我使用函数执行查询Func1(value)
SELECT Func1(Value)
FROM tbl
WHERE ID = 1
输出,我希望是:100,200,300,400
测试数据
DECLARE @Table1 TABLE(ID INT, Value INT)
INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400)
查询
SELECT ID
,STUFF((SELECT ', ' + CAST(Value AS VARCHAR(10)) [text()]
FROM @Table1
WHERE ID = t.ID
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @Table1 t
GROUP BY ID
结果集
╔════╦═════════════════════╗
║ ID ║ List_Output ║
╠════╬═════════════════════╣
║ 1 ║ 100, 200, 300, 400 ║
╚════╩═════════════════════╝
如何使用换行符而不是','来分隔值? – SqlLearner
我认为使用“COALESCE”功能会更好。 –
@ A.R。你实际上的意思是说:微软的(非)实施这个和人们的结果解决方法是非常可怕的。不要只怪一个实际上并不存在的无定形“全部SQL”。 –
而你的问题是什么? – steoleary
为什么所有行的ID为1?通常,ID是主键,通常对每一行都是唯一的。 –
SELECT Func1(Value)FROM tbl WHERE ID = 1 输出:100,200,300,400 –