2014-02-13 3 views

ответ

2

попробовать это!

using Stuff with xml path('') 

    select id, 
stuff(
(
select ',' + value from #t t1 where t1.id=t2.id for xml path(''),type).value('.','varchar(max)'),1,1,'') from #t t2 

group by t2.id 
+2

Необходимо также декодировать сохраненные символы XML. В противном случае эти символы останутся закодированными: '... для пути xml (''), type) .value ('.', 'Varchar (max)')' (или 'nvarchar (max)'). –

+0

спасибо! я отредактировал .. –

0

Здравствуйте, ниже данного требования оба столбца находятся в VARCHAR. Таким образом, мы можем использовать функцию SUBSTRING FUNCTION и CROSS APPLY для получения ожидаемого результата

DECLARE @t TABLE (ID VARCHAR(10) ,VALUE VARCHAR(10)) 
INSERT INTO @t (ID,VALUE)VALUES ('0001','a') 
INSERT INTO @t (ID,VALUE)VALUES ('0001','b') 
INSERT INTO @t (ID,VALUE)VALUES ('0002','c') 
INSERT INTO @t (ID,VALUE)VALUES ('0002','d') 
INSERT INTO @t (ID,VALUE)VALUES ('0003','e') 
INSERT INTO @t (ID,VALUE)VALUES ('0003','f') 
SELECT [Id], 
     SUBSTRING(d.Value,1, LEN(d.Value) - 1) VALUE 
FROM 
     (
      SELECT DISTINCT [Id] 
      FROM @t 
     ) a 
     CROSS APPLY 
     (
      SELECT Value + ', ' 
      FROM @t AS B 
      WHERE A.[Id] = B.[Id] 
      FOR XML PATH('') 
     ) D (Value) 
Смежные вопросы