Подтвердить что ты не робот

Что такое эквивалент 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'
4b9b3361

Ответ 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()