SQL 服务器 - 带引号的 LIST AGG
SQL Server - LIST AGG with quotes
我正在尝试使用找到的答案 here 来连接一个分组的字符串集合,除非我希望输出的每个项目都有引号。
Field A | Field B
1 | A
1 | B
2 | A
1 | "A","B"
2 | "A"
SELECT FieldA , STUFF(( SELECT ','+ FieldB FROM TableName a
WHERE b.FieldA = a.FieldA FOR XML PATH('')),1 ,1, '') Members
FROM TableName b
GROUP BY FieldA;
我试过在逗号前后添加引号,但格式不正确。
有什么建议吗?
只需将 ''''
/'"'
添加到 XML + STUFF 方法:
select distinct t1.FieldA,
STUFF((SELECT distinct ',' + ''''+ t2.FieldB + ''''
from yourtable t2
where t1.FieldA = t2.FieldA
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'') data
from yourtable t1;
编辑:
或使用QUOTENAME
:
select distinct t1.FieldA,
STUFF((SELECT distinct ',' + QUOTENAME(t2.FieldB, '"')
from yourtable t2
where t1.FieldA = t2.FieldA
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'') data
from yourtable t1;
我更喜欢第一个建议,但这里有一个变体:
SELECT FIELDA, ISNULL([1],'') + ' ' + ISNULL([2], '')
FROM
(SELECT FIELDA, ISNULL(QUOTENAME(FieldB, '"'),'') AS FIELDB
,ROW_NUMBER() OVER (PARTITION BY fielda ORDER BY fielda) AS tbl
FROM yourtable)a
PIVOT (MAX(fieldb) FOR tbl IN ([1],[2])) AS pvt
我正在尝试使用找到的答案 here 来连接一个分组的字符串集合,除非我希望输出的每个项目都有引号。
Field A | Field B
1 | A
1 | B
2 | A
1 | "A","B"
2 | "A"
SELECT FieldA , STUFF(( SELECT ','+ FieldB FROM TableName a
WHERE b.FieldA = a.FieldA FOR XML PATH('')),1 ,1, '') Members
FROM TableName b
GROUP BY FieldA;
我试过在逗号前后添加引号,但格式不正确。
有什么建议吗?
只需将 ''''
/'"'
添加到 XML + STUFF 方法:
select distinct t1.FieldA,
STUFF((SELECT distinct ',' + ''''+ t2.FieldB + ''''
from yourtable t2
where t1.FieldA = t2.FieldA
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'') data
from yourtable t1;
编辑:
或使用QUOTENAME
:
select distinct t1.FieldA,
STUFF((SELECT distinct ',' + QUOTENAME(t2.FieldB, '"')
from yourtable t2
where t1.FieldA = t2.FieldA
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'') data
from yourtable t1;
我更喜欢第一个建议,但这里有一个变体:
SELECT FIELDA, ISNULL([1],'') + ' ' + ISNULL([2], '')
FROM
(SELECT FIELDA, ISNULL(QUOTENAME(FieldB, '"'),'') AS FIELDB
,ROW_NUMBER() OVER (PARTITION BY fielda ORDER BY fielda) AS tbl
FROM yourtable)a
PIVOT (MAX(fieldb) FOR tbl IN ([1],[2])) AS pvt