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?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top