サブクエリの結果フィールドを親クエリに連結するにはどうすればよいですか?
-
06-07-2019 - |
質問
DB: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
だから、使用してみました
AS [Text()] ... FOR XML PATH( '')
ですが、奇妙なエンコード文字(キャリッジリターンなど)が含まれていました。 ...だから私はそれで100%満足していません。
COALESCEソリューションがあるかどうかも確認しようとしましたが、すべての試みが失敗しました。
そう-何か提案はありますか?
解決
他のヒント
古い投稿への回答、新しいバージョンのSQL Serverの更新が必要だと思った:
SQL Server 2017の場合、STRING_AGG( expression 、 seperator )を使用します
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