SQL-запрос к списку - PullRequest
       1

SQL-запрос к списку

0 голосов
/ 03 июня 2011

У меня есть табличная переменная в хранимой процедуре. Я хочу найти все уникальные значения в одном столбце и объединить их в список через запятую. Я уже нахожусь в хранимой процедуре, так что я могу сделать это каким-то образом; Тем не менее, мне любопытно, могу ли я сделать это с помощью запроса. Я нахожусь на SQL Server 2008. Этот запрос возвращает мне значения, которые я хочу:

SELECT DISTINCT faultType FROM @simFaults;

Есть ли способ (используя CONCAT или что-то в этом роде), где я могу получить список как одно значение, разделенное запятыми?

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

+ 1 до JNK - другой распространенный способ, который вы увидите, для которого не требуется переменная:

SELECT DISTINCT faulttype + ','
FROM @simfaults
FOR XML PATH ('')

Обратите внимание, что если тип ошибки содержит символы, такие как «<», например, они будутXML кодируется.Но для простых значений это будет хорошо. </p>

2 голосов
/ 03 июня 2011

Это сработало для меня в тестовом наборе данных.

DECLARE @MyCSV Varchar(200) = ''

SELECT @MyCSV = @MyCSV +
CAST(faulttype AS Varchar) + ','
FROM @Simfaults
GROUP BY faultType

SET @MyCSV = LEFT(@MyCSV, LEN(@MyCSV) - 1)

SELECT @MyCSV

Последняя часть необходима для обрезки запятой.

0 голосов
/ 03 июня 2011

вот как мы это делаем

create table #test (item int)
insert into #test 
values(1),(2),(3)

select STUFF((SELECT  ', ' + cast(Item as nvarchar) 
        FROM #test 
        FOR XML PATH('')), 1, 2, '')

Без пробела после запятой это было бы;

select STUFF((SELECT  ',' + cast(Item as nvarchar) 
        FROM #test 
        FOR XML PATH('')), 1,1, '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...