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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top