Pur*_*ome 4 sql-server concatenation subquery sql-server-2008
数据库:SQL Server 2008。
我有一个像这样的真正(假)常规查询:-
SELECT CarId, NumberPlate
(SELECT Owner
FROM Owners b
WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate
Run Code Online (Sandbox Code Playgroud)
这就是我想要得到的......
=> 1 ABC123 John, Jill, Jane
=> 2 XYZ123 Fred
=> 3 SOHOT Jon Skeet, ScottGu
Run Code Online (Sandbox Code Playgroud)
所以,我尝试使用
AS[Text()] ... FOR XML PATH('')但那是包括奇怪的编码字符(例如回车)。......所以我对此并不100%满意。
我还尝试查看是否有 COALESCE 解决方案,但我所有的尝试都失败了。
所以 - 有什么建议吗?
小智 6
回答一个旧帖子,只是认为它需要更新 SQL Server 的新版本:
对于 SQL Server 2017 使用 STRING_AGG( expression , seperator )
GROUP_CONCAT 是 MySQL。
在 SQL 2017 之前,您还可以执行以下操作(摘自我们当前基于 SQL Server 2016 的代码):
SELECT CarId, NumberPlate,
(STUFF(( SELECT ', ' + b.Owner
FROM Owners b
WHERE b.CarId = a.CarId
FOR XML PATH('')
)
,1,2,'') AS Owners
FROM Cars a
ORDER BY NumberPlate
Run Code Online (Sandbox Code Playgroud)
STRING_AGG 链接 https://database.guide/the-sql-server-equivalent-to-group_concat/ https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact -sql?view=sql-server-2017
链接到 STUFF:https ://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql ? view = sql-server-2017
最后链接到 FOR XML:https : //docs.microsoft.com/en-us/sql/relational-databases/xml/for-xml-sql-server?view=sql-server-2017
| 归档时间: |
|
| 查看次数: |
46932 次 |
| 最近记录: |