SQL Server - как объединить строку и добавить перевод строки? - PullRequest
6 голосов
/ 09 декабря 2010

Я хочу выбрать набор данных в одну строку, но я все еще хочу, чтобы каждый элемент находился в отдельной строке (я добавлю его в Crystal Reports, и это будет быстрее, чем при использовании множества вложенных отчетов.) *

Итак, у меня есть следующие данные:

ID  Assessor
1   Black
1   Jones

и я хочу запросить его и вернуть одну строку, которая выглядит следующим образом:

Black
Jones

если я делаю выбор, используя coalesce, я могу сделать его запятым или разделенным точкой с запятой, но не разделителем строки:

BEGIN
    declare @Assessors NVarChar(max)
    Declare @LineFeed varchar(10)
    DECLARE @Return varchar(10)
    Set @LineFeed = char(10)
    SET @Return = char(13)

    Select  @Assessors = COALESCE(@Assessors + ', ', '') + a.Assessor
    FROM  dbo.Assessment a
    Where   (@ID = a.ID)

Return @Assessors
END

в этом случае функция вернет 'Black, Jones'. Но если я изменю строку на

Select  @Assessors = COALESCE(@Assessors + @Return + @LineFeed, '') + a.Assessor

он возвращает 'Black Jones' - он не вставляет перевод строки и не возвращает, только пробел.

Полагаю, мне не нужно использовать Coalesce, но я попробовал просто стандартную конкатенацию, и это тоже не вставит. Я прямо сейчас включил это в функцию, но планирую поместить ее как часть хранимой процедуры, чтобы она была быстрее.

Ответы [ 2 ]

7 голосов
/ 09 декабря 2010

CHAR(13)+CHAR(10) приведет к разрывам строк, я делаю это все время в рабочем коде.

Я запустил ваш код, и он вызывает разрывы строк в моей системе. В SSMS переключите свой взгляд на «Результаты в текст» с «Результаты в сетку», и вы увидите разрывы строк.

1 голос
/ 09 декабря 2010

используйте функцию Char для вставки:

Символ табуляции (9)

Символ перевода строки (10)

Символ возврата каретки (13)

...