Это мой столКак сделать эффективную запятая
create table #t(id varchar(10),value varchar(10))
insert into #t values('0001','a'),('0001','b'),('0002','c'),('0002','d')
Мне нужна эффективным способ получения CSV
id value
0001 a,b
0002 c,d
Это мой столКак сделать эффективную запятая
create table #t(id varchar(10),value varchar(10))
insert into #t values('0001','a'),('0001','b'),('0002','c'),('0002','d')
Мне нужна эффективным способ получения CSV
id value
0001 a,b
0002 c,d
попробовать это!
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
Здравствуйте, ниже данного требования оба столбца находятся в 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)
Необходимо также декодировать сохраненные символы XML. В противном случае эти символы останутся закодированными: '... для пути xml (''), type) .value ('.', 'Varchar (max)')' (или 'nvarchar (max)'). –
спасибо! я отредактировал .. –