2014-02-13 159 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」。 –