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

Откуда:
Сообщений: 45
Есть таблица:
NAME TYPE
A один
A два
A три
S пять
S три
D четыре


каким запросом ее можно превратить в такую? количество NAME больше 300
NAME TYPE
A один. два. три
S три. пять
D четыре
6 мар 12, 11:37    [12201524]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
faq
6 мар 12, 11:40    [12201548]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
pooleet
Member

Откуда:
Сообщений: 45
Дедушка, спасибо
6 мар 12, 12:00    [12201739]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
pooleet
Member

Откуда:
Сообщений: 45
только как поступить если у меня поле type имеет 600 разных значений? все прописывать в INSERT?
6 мар 12, 12:07    [12201801]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
Glory
Member

Откуда:
Сообщений: 104751
pooleet
все прописывать в INSERT?

INSERT моделирует вашу таблицу
6 мар 12, 12:09    [12201819]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
_ч_
Member

Откуда:
Сообщений: 1446
declare @t table(Id int, NAME nvarchar(1),	[TYPE] nvarchar(100))

insert into @t(id, Name, [Type])
select 1, 'A',	'один'
union
select 2, 'A',	'два'
union
select 3, 'A',	'три'
union
select 4, 'S', 'пять'
union
select 5, 'S',	'три'
union
select 6, 'D',	'четыре'



select NAME, (select cast([TYPE] as nvarchar)+ ',' as 'data()' from @t t2 where t1.NAME=t2.NAME order by id for xml path('') )
from @t t1
group by NAME
6 мар 12, 13:32    [12202781]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
_ч_
declare @t table(Id int, NAME nvarchar(1),	[TYPE] nvarchar(100))

insert into @t(id, Name, [Type])
select 1, 'A',	'один'
union
select 2, 'A',	'два'
union
select 3, 'A',	'три'
union
select 4, 'S', 'пять'
union
select 5, 'S',	'три'
union
select 6, 'D',	'четыре'



select NAME, (select cast([TYPE] as nvarchar)+ ',' as 'data()' from @t t2 where t1.NAME=t2.NAME order by id for xml path('') )
from @t t1
group by NAME
select t1.[Name],
 stuff
 (
  (
   select N','+t2.[Type]
   from @t t2
   where t1.[Name]=t2.[Name]
   order by t2.id
   for xml path('')
  ,type
  ).value('.','nvarchar(max)'),
  1,1,''
 )
from @t t1
group by t1.[Name];
6 мар 12, 13:44    [12202946]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
_ч_
Member

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

а чем мой вариант плох? кроме того, что остается лишняя запятая?
6 мар 12, 13:48    [12202994]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
_ч_
iap,

а чем мой вариант плох? кроме того, что остается лишняя запятая?
declare @t table(id int, Name nvarchar(1),	[Type] nvarchar(100))

insert into @t(id, Name, [Type])
select 1, 'A',	'<один>'
union
select 2, 'A',	'<два>'
union
select 3, 'A',	'<три>'
union
select 4, 'S', '<пять>'
union
select 5, 'S',	'<три>'
union
select 6, 'D',	'<четыре>'

select Name, (select cast([Type] as nvarchar)+ ',' as 'data()' from @t t2 where t1.Name=t2.Name order by id for xml path('') )
from @t t1
group by Name
Это если закрыть глаза на возмутительное использование букв разного регистра в одних и тех же именах.
Большую часть времени мне, например, пришлось причёсывать это чудо.

Я вот не понимаю, с какой целью хаотично используются буквы разного регистра?
6 мар 12, 13:57    [12203097]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
pooleet
Member

Откуда:
Сообщений: 45
буквы только для примера что бы не перегружать информацией


punkt sernr ARKTX
ФСК ПС Демьянская 25009 ТРАНСФОРМАТОР АОДЦТН-167000/500
ФСК ПС Демьянская 25003 Трансформатор АОДЦТН-167000/500/220
ФСК ПС Демьянская 25004 Трансформатор АОДЦТН-167000/500/220
ФСК ПС Демьянская 25005 Трансформатор АОДЦТН-167000/500/220
ФСК ПС Демьянская 25006 Трансформатор АОДЦТН-167000/500/220
ФСК ПС Демьянская 25007 Трансформатор АОДЦТН-167000/500/220
ФСК ПС Демьянская 25008 Трансформатор АОДЦТН-167000/500/220
ФСК ПС Демьянская 25001 Трансформатор АТДЦТН-200000/220
ФСК ПС Демьянская 25002 Трансформатор АТДЦТН-200000/220
ФСК ПС Демьянская Трансформатор ТРДН-25000/110
ФСК ПС Демьянская Трансформатор ТРДН-25000/110




punkt sernr ARKTX
ФСК ПС Демьянская 25003. 25004. 25005. 25006. 25007. 25008 ТРАНСФОРМАТОР АОДЦТН-167000/500
ФСК ПС Демьянская 25001. 25002 Трансформатор АТДЦТН-200000/220
6 мар 12, 14:27    [12203448]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
pooleet,

если Вы про буквы отозвались на мои слова, то это я не Вам
_ч_ в своем скрипте использовал имена одних и тех же полей,
написанные то в верхнем, то в нижнем регистре.
А у меня COLLATE базы регистрозависимый!

Что касается Вашего примера, то чем Вас наши ответы не устраивают?
6 мар 12, 14:49    [12203684]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
_ч_
Member

Откуда:
Сообщений: 1446
iap
Я вот не понимаю, с какой целью хаотично используются буквы разного регистра?


С той целью, что я обычно копирую названия полей из первого поста (там они как раз большими буквами), а далее делаю так, как принято в нашей корпоративной бд (имена колонок начинаются с заглавной буквы, далее все с маленькой). Просто привычка, не более того.
6 мар 12, 14:59    [12203798]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
_ч_
Member

Откуда:
Сообщений: 1446
iap
А у меня COLLATE базы регистрозависимый!


Извиняйте, не хотел
6 мар 12, 14:59    [12203801]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
pooleet
Member

Откуда:
Сообщений: 45
Ответы замечательные
выбрала вот этот:

iap
select t1.[Name],
 stuff
 (
  (
   select N','+t2.[Type]
   from @t t2
   where t1.[Name]=t2.[Name]
   order by t2.id
   for xml path('')
  ,type
  ).value('.','nvarchar(max)'),
  1,1,''
 )
from @t t1
group by t1.[Name]
6 мар 12, 15:00    [12203804]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pooleet, хм... че-то напоминают мне исходные данные))).
6 мар 12, 15:00    [12203814]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Опять sql-ex что ли?
А примут там for xml path('')-то?
6 мар 12, 15:32    [12204167]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap
Опять sql-ex что ли?
А примут там for xml path('')-то?

Да нет, я не о том))). Увидел табличку вида:
pooleet
punkt sernr ARKTX
ФСК ПС Демьянская 25009 ТРАНСФОРМАТОР АОДЦТН-167000/500
ФСК ПС Демьянская 25003 Трансформатор АОДЦТН-167000/500/220

и полез искать кто жеж ТС и чем занимается. Но в итоге все равно выяснелось, что я ее не знаю. Но эти трансформаторы знаю ооооочень хорошо.
6 мар 12, 20:46    [12206531]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
pooleet
Member

Откуда:
Сообщений: 45
Спасибо за помощь вот что у меня получилось. выводит последнюю таблицу из сообщения 12203448

 select a1.NAME,
 (stuff
 (
  (
   select N','+t1.[TYPE]
   from ZREPPROG t1 left join VBAP t2 on t1.VBELN=t2.VBELN and a2.TRANS=t2.TRANS
   where a1.[NAME]=t1.[NAME] and t1.[TYPE] in 
							(
							select distinct z1.TYPE
							from ZREPPROG z1 left join VBAP z2 on z1.VBELN=z2.VBELN
							where  t1.[TYPE]=z1.TYPE and t2.TRANS=z2.TRANS
							) 
	order by t1.NAME
	
    for xml path('')
  ,type
  ).value('.','nvarchar(max)'),
  1,1,''
 )) as TYPE , a2.TRANS
from ZREPPROG a1 left join VBAP a2 on a1.VBELN=a2.VBELN
group by a1.[NAME], a2.TRANS
7 мар 12, 08:50    [12207634]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Объединение ячеек из одного столбца в строку  [new]
direget
Member

Откуда:
Сообщений: 10
pooleet
Ответы замечательные
выбрала вот этот:

iap
select t1.[Name],
 stuff
 (
  (
   select N','+t2.[Type]
   from @t t2
   where t1.[Name]=t2.[Name]
   order by t2.id
   for xml path('')
  ,type
  ).value('.','nvarchar(max)'),
  1,1,''
 )
from @t t1
group by t1.[Name]



Огромное спасибо за помощь! Забрал!
29 янв 20, 09:25    [22068314]     Ответить | Цитировать Сообщить модератору
 Re: Объединение ячеек из одного столбца в строку  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
direget
pooleet
Ответы замечательные
выбрала вот этот:

пропущено...



Огромное спасибо за помощь! Забрал!
Не прошло и восьми лет!
Начиная с SQL 2017 появилась функция STRING_AGG
29 янв 20, 10:11    [22068340]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить