Como posso concatinar um campo de resultado de subconsência na consulta dos pais?
-
06-07-2019 - |
Pergunta
DB: SQL Server 2008.
Eu tenho uma consulta Groovy realmente (falsa) como esta:-
SELECT CarId, NumberPlate
(SELECT Owner
FROM Owners b
WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate
E é isso que estou tentando conseguir ...
=> 1 ABC123 John, Jill, Jane
=> 2 XYZ123 Fred
=> 3 SOHOT Jon Skeet, ScottGu
Então, eu tentei usar
COMO [Text()] ... FOR XML PATH('')
Mas isso estava incluindo caracteres codificados estranhos (por exemplo, retorno do carro). ... então não estou 100% feliz com isso.
Também tentei ver se há uma solução Coalesce, mas todas as minhas tentativas falharam.
Então - alguma sugestão?
Solução
Experimente a solução para esta pergunta:
:)
Outras dicas
Respondendo a uma postagem antiga, apenas pensei que precisava de uma atualização para versões mais recentes do SQL Server:
Para o SQL Server 2017, use String_agg (expressão, Seperator)
Group_concat é mysql.
Antes do SQL 2017, você também pode fazer algo como (cortado da nossa base de código atual no 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
Links para string_agghttps://database.guide/the-sql-sever-equivalent-to-group_concat/ https://docs.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-2017
Link para coisas:https://docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-2017
e finalmente links para xml:https://docs.microsoft.com/en-us/sql/relational-databases/xml/for-xml-sql-server?view=sql-server-2017
Usar GROUP_CONCAT
SELECT CarId, NumberPlate
(SELECT GROUP_CONCAT(Owner)
FROM Owners b
WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate