у меня есть эта таблица:
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 года ... и он мне нужен для хранимой процедуры.
Тогда у вас может быть полевой день с одним из ответов на этот вопрос.


Ну вот:
;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 действительно существует в виде таблицы.
Большой! Я только что выложил в апдейт. Спасибо! Действительно хороший запрос!
Обновитесь до 2017 года и наслаждайтесь преимуществами
STRING_AGG.