Что такое эквивалент String.Join на TSQL?
Возможный дубликат:
Есть ли способ создать функцию SQL Server для объединения нескольких строк из подзапроса в одно поле с разделителями?
Привет всем!
Я ищу простой способ конкатенации значений "n". Что-то вроде:
SELECT MyConcat(',', T.TextColumn)
FROM SomeTable AS T
WHERE T.SomeOtherColumn = SomeCondition
Итак, если у меня есть таблица вроде:
SomeTable:
Id | TextColumn | SomeOtherColumn
----+------------+----------------
1 | Qwerty | Y
2 | qwerty | N
3 | azerty | N
4 | Azerty | Y
Это приведет к чему-то вроде:
SQL:
SELECT MyConcat(';', T.TextColumn)
FROM SomeTable AS T
WHERE T.SomeOtherColumn = 'Y'
RESULT:
'Qwerty;Azerty'
Ответы
Ответ 1
Это должно сделать трюк:
DECLARE @Result VARCHAR(MAX);
SELECT
@Result = CASE
WHEN @Result IS NULL
THEN T.TextColumn
ELSE @Result + ';' + T.TextColumn
END
FROM
SomeTable AS T
WHERE
T.SomeOtherColumn = 'Y';
SELECT @Result
Ответ 2
SELECT CAST(TextColumn + ';' AS VARCHAR(MAX))
FROM SomeTable
WHERE SomeOtherColumn = 'Y'
FOR XML PATH ('')
Если вам не нравится конечный ;
, вы можете удалить символ из результата.
ИЗМЕНИТЬ В 2017 г.
На многих платформах теперь поддерживается функция окон LISTAGG()