サブクエリの結果フィールドを親クエリに連結するにはどうすればよいですか?

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

質問

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top