Как я могу объединить поле результата подзапроса с родительским запросом?

StackOverflow https://stackoverflow.com/questions/1016749

Вопрос

ДБ:Sql Server 2008.

У меня есть действительно (поддельный) заводной запрос, подобный этому:-

SELECT CarId, NumberPlate
    (SELECT Owner
     FROM Owners b
     WHERE b.CarId = a.CarId) AS Owners
FROM Cars a
ORDER BY NumberPlate

И это то, чего я пытаюсь добиться...

=> 1    ABC123     John, Jill, Jane
=> 2    XYZ123     Fred
=> 3    SOHOT      Jon Skeet, ScottGu

Итак, я попробовал использовать

КАК [Text()] ... FOR XML PATH('') но это включало странные закодированные символы (например.возврат каретки)....так что я не доволен этим на 100%.

Я также попытался посмотреть, есть ли ОБЪЕДИНЯЮЩЕЕ решение, но все мои попытки провалились.

Итак, есть какие-нибудь предложения?

Это было полезно?

Другие советы

Отвечая на старый пост, я подумал, что нужно обновить новые версии SQL Server:

Для SQL Server 2017 используйте STRING_AGG ( выражение , разделитель )

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

Ссылки на 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

Используйте 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top