如何获取:
id Name Value
1 A 4
1 B 8
2 C 9
至
id Column
1 A:4, B:8
2 C:9
发布于 2017-04-28 01:32:29
如果是SQL Server 2017或SQL Server Vnext,SQL Azure,您可以使用string_agg
,如下所示:
select id, string_agg(concat(name, ':', [value]), ', ')
from #YourTable
group by id
发布于 2011-12-07 01:58:00
使用XML路径不会像您预期的那样完美地连接在一起...它会将"&“替换为"&”,还会与<" and ">
...maybe打乱一些其他东西,而不是sure...but你可以尝试这样做
我遇到了一种变通方法...您需要替换:
FOR XML PATH('')
)
通过以下方式:
FOR XML PATH(''),TYPE
).value('(./text())[1]','VARCHAR(MAX)')
如果您正在使用...or NVARCHAR(MAX)
,请执行以下操作。
为什么见鬼的SQL
没有连接聚合函数?这是皮塔饼。
发布于 2011-10-18 18:48:45
当我尝试将Kevin Fairchild的建议转换为使用包含空格和编码的特殊XML字符(&
、<
、>
)的字符串时,我遇到了一些问题。
我的代码的最终版本(它没有回答最初的问题,但可能对某些人有用)如下所示:
CREATE TABLE #YourTable ([ID] INT, [Name] VARCHAR(MAX), [Value] INT)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'Oranges & Lemons',4)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'1 < 2',8)
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9)
SELECT [ID],
STUFF((
SELECT ', ' + CAST([Name] AS VARCHAR(MAX))
FROM #YourTable WHERE (ID = Results.ID)
FOR XML PATH(''),TYPE
/* Use .value to uncomment XML entities e.g. > < etc*/
).value('.','VARCHAR(MAX)')
,1,2,'') as NameValues
FROM #YourTable Results
GROUP BY ID
DROP TABLE #YourTable
它不是使用空格作为分隔符并用逗号替换所有空格,而是在每个值前面加上逗号和空格,然后使用STUFF
删除前两个字符。
通过使用TYPE指令,可以自动处理XML编码。
https://stackoverflow.com/questions/273238
复制相似问题