Comment concaténer un champ de résultat de sous-requête dans la requête parent?
-
06-07-2019 - |
Question
DB: Sql Server 2008.
J'ai une très (fausse) requête groovy comme celle-ci: -
SELECT CarId, NumberPlate
(SELECT Owner
FROM Owners b
WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate
Et voici ce que j'essaie d'obtenir ...
=> 1 ABC123 John, Jill, Jane
=> 2 XYZ123 Fred
=> 3 SOHOT Jon Skeet, ScottGu
J'ai donc essayé d'utiliser
AS [Text ()] ... FOR XML PATH ('')
mais cela incluait des caractères codés étranges (par exemple, un retour chariot). ... donc je ne suis pas à 100% satisfait de cela.
J'ai également essayé de voir s'il existe une solution COALESCE, mais toutes mes tentatives ont échoué.
Alors, des suggestions?
La solution
Essayez la solution à cette question:
:
Autres conseils
Pour répondre à un ancien message, nous pensions qu'il fallait une mise à jour pour les versions les plus récentes de SQL Server:
Pour SQL Server 2017, utilisez STRING_AGG ( expression , séparateur )
.GROUP_CONCAT est MySQL.
Avant SQL 2017, vous pouvez également procéder de la manière suivante (extrait de notre base de code actuelle sur 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
Liens vers 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
Lien vers STUFF: https: //docs.microsoft.com/en-us/sql/t-sql/functions/stuff-transact-sql?view=sql-server-2017
et enfin des liens vers FOR XML: https://docs.microsoft.com/en-us/sql/relational-databases/xml/for-xml-sql-server?view=sql-server-2017
Utilisez 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