0

i have this table:

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

The output is the next:

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

And i would like the next:

field1  field2  field3  store
g1      g2      g3      s1_s2_s3_s4

Is this possible?

Thanks!

Giuseppe Lolli
  • 167
  • 4
  • 15

1 Answers1

2

Here you go:

;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 is all possible values of fields, and A gets the store values concatenated.

Please note that you won't need the with A as.... part, if A actually exists as a table.

George Menoutis
  • 6,894
  • 3
  • 19
  • 43