Как запросить (T-SQL) один столбец по горизонтали? - PullRequest
0 голосов
/ 25 июня 2018

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

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

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

Спасибо!

1 Ответ

0 голосов
/ 25 июня 2018

Вот, пожалуйста:

;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 действительно существует в виде таблицы.

...