2014-02-13 95 views
68

我想在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

+0

而你的问题是什么? – steoleary

+0

为什么所有行的ID为1?通常,ID是主键,通常对每一行都是唯一的。 –

+0

SELECT Func1(Value)FROM tbl WHERE ID = 1 输出:100,200,300,400 –

回答

178

测试数据

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 ║ 
╚════╩═════════════════════╝ 
+3

如何使用换行符而不是','来分隔值? – SqlLearner

+1

我认为使用“COALESCE”功能会更好。 –

+6

@ A.R。你实际上的意思是说:微软的(非)实施这个和人们的结果解决方法是非常可怕的。不要只怪一个实际上并不存在的无定形“全部SQL”。 –