Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение ячеек из одного столбца в строку / 20 сообщений из 20, страница 1 из 1
06.03.2012, 11:37
    #37693021
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
Есть таблица:
NAME TYPEA одинA дваA триS пятьS триD четыре

каким запросом ее можно превратить в такую? количество NAME больше 300
NAME TYPEA один. два. триS три. пятьD четыре
...
Рейтинг: 0 / 0
06.03.2012, 11:40
    #37693028
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
...
Рейтинг: 0 / 0
06.03.2012, 12:00
    #37693087
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
Дедушка, спасибо
...
Рейтинг: 0 / 0
06.03.2012, 12:07
    #37693106
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
только как поступить если у меня поле type имеет 600 разных значений? все прописывать в INSERT?
...
Рейтинг: 0 / 0
06.03.2012, 12:09
    #37693111
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
pooleetвсе прописывать в INSERT?
INSERT моделирует вашу таблицу
...
Рейтинг: 0 / 0
06.03.2012, 13:32
    #37693369
_ч_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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
...
Рейтинг: 0 / 0
06.03.2012, 13:44
    #37693407
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
_ч_
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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];
...
Рейтинг: 0 / 0
06.03.2012, 13:48
    #37693416
_ч_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
iap,

а чем мой вариант плох? кроме того, что остается лишняя запятая?
...
Рейтинг: 0 / 0
06.03.2012, 13:57
    #37693441
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
_ч_iap,

а чем мой вариант плох? кроме того, что остается лишняя запятая?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
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

Это если закрыть глаза на возмутительное использование букв разного регистра в одних и тех же именах.
Большую часть времени мне, например, пришлось причёсывать это чудо.

Я вот не понимаю, с какой целью хаотично используются буквы разного регистра?
...
Рейтинг: 0 / 0
06.03.2012, 14:27
    #37693513
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
буквы только для примера что бы не перегружать информацией


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
...
Рейтинг: 0 / 0
06.03.2012, 14:49
    #37693550
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
pooleet,

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

Что касается Вашего примера, то чем Вас наши ответы не устраивают?
...
Рейтинг: 0 / 0
06.03.2012, 14:59
    #37693576
_ч_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
iapЯ вот не понимаю, с какой целью хаотично используются буквы разного регистра?

С той целью, что я обычно копирую названия полей из первого поста (там они как раз большими буквами), а далее делаю так, как принято в нашей корпоративной бд (имена колонок начинаются с заглавной буквы, далее все с маленькой). Просто привычка, не более того.
...
Рейтинг: 0 / 0
06.03.2012, 14:59
    #37693577
_ч_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
iapА у меня COLLATE базы регистрозависимый!


Извиняйте, не хотел
...
Рейтинг: 0 / 0
06.03.2012, 15:00
    #37693579
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
Ответы замечательные
выбрала вот этот:

iap
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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]
...
Рейтинг: 0 / 0
06.03.2012, 15:00
    #37693583
kDnZP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
pooleet, хм... че-то напоминают мне исходные данные))).
...
Рейтинг: 0 / 0
06.03.2012, 15:32
    #37693657
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
Опять sql-ex что ли?
А примут там for xml path('')-то?
...
Рейтинг: 0 / 0
06.03.2012, 20:46
    #37694269
kDnZP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
iapОпять sql-ex что ли?
А примут там for xml path('')-то?
Да нет, я не о том))). Увидел табличку вида:
pooleetpunkt sernr ARKTXФСК ПС Демьянская 25009 ТРАНСФОРМАТОР АОДЦТН-167000/500ФСК ПС Демьянская 25003 Трансформатор АОДЦТН-167000/500/220
и полез искать кто жеж ТС и чем занимается. Но в итоге все равно выяснелось, что я ее не знаю. Но эти трансформаторы знаю ооооочень хорошо.
...
Рейтинг: 0 / 0
07.03.2012, 08:50
    #37694672
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
Спасибо за помощь вот что у меня получилось. выводит последнюю таблицу из сообщения 12203448

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 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
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
29.01.2020, 09:25
    #39919766
direget
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
pooleet
Ответы замечательные
выбрала вот этот:

iap
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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]




Огромное спасибо за помощь! Забрал!
...
Рейтинг: 0 / 0
29.01.2020, 10:11
    #39919786
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение ячеек из одного столбца в строку
direget
pooleet
Ответы замечательные
выбрала вот этот:

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



Огромное спасибо за помощь! Забрал!
Не прошло и восьми лет!
Начиная с SQL 2017 появилась функция STRING_AGG
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение ячеек из одного столбца в строку / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]