Как запросить (T-SQL) один столбец по горизонтали?

у меня есть эта таблица:

select A.field1, a.field2, a.field3, a.store
from (
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's1' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's2' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's3' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's4' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's4' as store
) A

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

field1  field2  field3  store
g1      g2      g3      s1
g1      g2      g3      s2
g1      g2      g3      s3
g1      g2      g3      s4
g1      g2      g3      s4

И хотелось бы следующего:

field1  field2  field3  store
g1      g2      g3      s1_s2_s3_s4

Это возможно?

Спасибо!

Обновитесь до 2017 года и наслаждайтесь преимуществами STRING_AGG.

Jeroen Mostert 25.06.2018 15:32

Этот код действительно неудобен. Вы действительно вставляете строки вручную? Нет ли существующей таблицы? А еще не существует?

George Menoutis 25.06.2018 15:35

Мой клиент не хочет обновляться до 2017 года ... и он мне нужен для хранимой процедуры.

Giuseppe Lolli 25.06.2018 15:40

Тогда у вас может быть полевой день с одним из ответов на этот вопрос.

Jeroen Mostert 25.06.2018 15:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну вот:

;with A as(
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's1' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's2' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's3' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's4' as store union all
select 'g1' as field1, 'g2' as field2, 'g3' as field3, 's4' as store
)
select * from 
(select distinct field1,field2,field3 from A) Af
cross apply(select
                STUFF(  ( 
                        select distinct '_' + A.store
                        from ( select * from A) A
                        where Af.field1=A.field1 and Af.field2=A.field2 and Af.field3=A.field3 
                        FOR XML PATH(''), TYPE
                    ).value('.','nvarchar(max)')
                ,1,1, '') as conc_store
            ) as q1

Af - все возможные значения полей, и A объединяет значения хранилища.

Обратите внимание, что вам не понадобится деталь with A as...., если A действительно существует в виде таблицы.

Большой! Я только что выложил в апдейт. Спасибо! Действительно хороший запрос!

Giuseppe Lolli 25.06.2018 16:05

Другие вопросы по теме