Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вывод значений в строку  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Добрый день, подскажите пожалуйста.

Как мне вывести значения столбца в строку?

Например выводится

ID, Name
1, Саня
2, Петя
3, Оля

Что бы вывелось

Name
Саша, Петя, Оля

В строку
21 ноя 17, 13:52    [20972080]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Nickolay-123
Member

Откуда:
Сообщений: 21
Pabl0,

а какие правила преобразования имен?
21 ноя 17, 13:53    [20972093]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Дело не в имени, это лишь пример, там совсем другое будет выводится в строку
21 ноя 17, 13:56    [20972108]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
TC получает награду "Золотой гугел" как задавший вопрос с 17 400 000 ссылок ответов в гугле
21 ноя 17, 13:57    [20972115]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Nickolay-123
Member

Откуда:
Сообщений: 21
Pabl0
Дело не в имени, это лишь пример, там совсем другое будет выводится в строку

Как это не в имени? А как тогда Саня вдруг стал Сашей?

Это главный вопрос, который вам нужно формализовать, а уж в строку собрать это пустяк.
21 ноя 17, 14:00    [20972129]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Pabl0
Member

Откуда:
Сообщений: 265
(select STUFF((select ', ' + A1.Name
                 from _ApplicHeads A 
                 INNER JOIN Actors A1 ON A1.Actor = A.Acceptor
                 WHERE A.EstimateID = 20545000 
                 
                 
                 FOR XML PATH('')),1,2,''))


Он выведет все данные, но соединить я не смогу по айдишникам с другой таблицей строку ведь
21 ноя 17, 14:07    [20972156]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите в чем тут ошибка?

Ругается Incorrect syntax near the keyword 'for'.

		SELECT t1.Acceptor
		 stuff
		 (
		  (
		   select t2.Name+','
		   FROM Actors t2
		   WHERE t1.Acceptor = t2.Actor
		      
		   for xml path('')
		  ,type
		  ).value('.','varchar(max)'),
		  1,0,''
		 ) as Name1
		--into #Acc
		FROM _ApplicHeads t1
		WHERE t1.EstimateID = 20545000
21 ноя 17, 14:29    [20972270]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
SELECT N'Саша, Петя, Оля' AS [Name]
21 ноя 17, 14:36    [20972314]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
А если серьезно. Напиши по-человечески, желательно со знаками препинания, что ты хочешь.

Сами по себе "столбцы в строку" собираются без STUFF и .value()

DECLARE @Input table (S varchar(20)) 
INSERT INTO @Input VALUES ('Автор'), ('используй') ,('пунктуацию')

SELECT S + ', ' FROM @Input FOR XML PATH('')
21 ноя 17, 14:58    [20972428]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Функция рулит. У мну такие есть.

Function .....
declare @res varchar(500)

SELECT @Res = @Res + ',' + Name
from MyTable
....
21 ноя 17, 15:11    [20972484]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Cammomile
А если серьезно. Напиши по-человечески, желательно со знаками препинания, что ты хочешь.

Сами по себе "столбцы в строку" собираются без STUFF и .value()

DECLARE @Input table (S varchar(20)) 
INSERT INTO @Input VALUES ('Автор'), ('используй') ,('пунктуацию')

SELECT S + ', ' FROM @Input FOR XML PATH('')
И кто же уберёт запятую в конце?
А без type и value() криво преобразуются некоторые символы (например, '&').

Pabl0, я просто не вижу запятую после t1.Acceptor или её действительно нет?
21 ноя 17, 15:37    [20972610]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
LSV
Функция рулит. У мну такие есть.

Function .....
declare @res varchar(500)

SELECT @Res = @Res + ',' + Name
from MyTable
....
Это недокументировано. И в некоторых случаях криво работает.
Кстати, в показанном исполнении выдаст всегда NULL, ибо @Res неинициализировано.
Разве что перед запуском выполнить SET CONCAT_NULL_YIELDS_NULL ON
Но это уже совсем говнокод получится.
21 ноя 17, 15:41    [20972621]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
LSV 
Member

Откуда: Киев
Сообщений: 30047
Функция рулит. У мну такие есть.

Function .....
declare @res varchar(500)

SELECT @Res = @Res + ',' + Name

from MyTable
....


Самый кривой и самый медленный из всех возможных подходов. Вы же понимаете, что сервер пересоздает @Res на каждую строчку ввода?
21 ноя 17, 15:54    [20972667]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
asdor
Member

Откуда: Москва
Сообщений: 468
Pabl0,
А в 2017 появилось STRING_AGG
22 ноя 17, 13:16    [20974885]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
asdor
Pabl0,
А в 2017 появилось STRING_AGG
в 2016
22 ноя 17, 13:36    [20974938]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
iap,

а у меня нету :(
ps
SQL Server (starting with 2017)
22 ноя 17, 13:37    [20974945]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
msLex
Member

Откуда:
Сообщений: 7726
iap
asdor
Pabl0,
А в 2017 появилось STRING_AGG
в 2016

в 2016 split появился
22 ноя 17, 13:43    [20974965]     Ответить | Цитировать Сообщить модератору
 Re: Вывод значений в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
msLex
iap
пропущено...
в 2016

в 2016 split появился
Да. Значит, я приврал
22 ноя 17, 13:50    [20974985]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить