Как отформатировать вывод TSQL SELECT в SQL Sever - PullRequest
2 голосов
/ 18 апреля 2010

Как перебрать результаты оператора select, чтобы получить форматированный текст? например, выбор такой:

select name from table 

и нам нужна переменная @names, подобная этой:

"name1,name2,name3"

База данных - SQL Server 2005

Ответы [ 3 ]

5 голосов
/ 18 апреля 2010

Если таблица содержит несколько записей, т. Е .:

1, name1, ..
2, name2, ..
3, name3, ..

тогда этот запрос:

DECLARE @names VARCHAR(MAX)
SELECT @names = COALESCE(@names + ', ', '') + name
FROM table

даст следующий результат:

name1, name2, name3

См. COALESCE на MSDN

1 голос
/ 19 апреля 2010

Если вы планируете сделать функцию, которую вы делаете для каждой строки, из другого запроса, это будет очень медленным, потому что функцию нужно вызывать для каждой строки. Вы должны работать с наборами данных за один раз, он делает все строки за один раз. Это пример того, как объединить несколько значений для каждой строки другого запроса:

set nocount on;
declare @t table (id int, name varchar(20), x char(1))
insert into @t (id, name, x)
select 1,'test1', 'a' union
select 1,'test1', 'b' union
select 1,'test1', 'c' union
select 2,'test2', 'a' union
select 2,'test2', 'c' union
select 3,'test3', 'b' union
select 3,'test3', 'c' 

SELECT p1.id, p1.name,
          stuff(
                   (SELECT
                        ', ' + x
                        FROM @t p2
                        WHERE p2.id=p1.id
                        ORDER BY name, x
                        FOR XML PATH('') 
                   )
                   ,1,2, ''
               ) AS p3
      FROM @t p1
     GROUP BY 
        id, name

ВЫВОД:

id          name                 p3
----------- -------------------- -----------
1           test1                a, b, c
2           test2                a, c
3           test3                b, c
1 голос
/ 18 апреля 2010

Это должно быть сделано внутри функции. Там нет быстрого способа сделать это. Обычно вы делаете это в коде на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...