2014-02-13 7 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

ВЫБРАТЬ Func1 (Value) FROM ТПС WHERE ID = 1 выход: 100200300400 –

ответ

178

Test Data

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. что вы на самом деле хотели сказать: Microsoft (не) реализация этого и возникающие в результате обходные пути людей ужасны по необходимости. Не просто обвиняйте аморфный «весь SQL», который практически не существует. –

Смежные вопросы