Как я могу объединить поле результата подзапроса с родительским запросом?
-
06-07-2019 - |
Вопрос
ДБ: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