これは確かに尋ねられたと思いますが、適切な検索語句を見つけることができません。
次のようなスキーマがあるとします。
| CarMakeID | CarMake
------------------------
| 1 | SuperCars
| 2 | MehCars
| CarMakeID | CarModelID | CarModel
-----------------------------------------
| 1 | 1 | Zoom
| 2 | 1 | Wow
| 3 | 1 | Awesome
| 4 | 2 | Mediocrity
| 5 | 2 | YoureSettling
次のようなデータセットを作成したい:
| CarMakeID | CarMake | CarModels
---------------------------------------------
| 1 | SuperCars | Zoom, Wow, Awesome
| 2 | MehCars | Mediocrity, YoureSettling
次のスタイルのクエリで、SQL Serverの文字列の「AGG」の代わりに何をしますか?
SELECT *,
(SELECT AGG(CarModel)
FROM CarModels model
WHERE model.CarMakeID = make.CarMakeID
GROUP BY make.CarMakeID) as CarMakes
FROM CarMakes make
http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/
これはTransact SQLの興味深い問題であり、多くの解決策とかなりの議論があります。特定の各カテゴリの各行から区別される列が「集計」列にリストされている要約結果をどのように作成しますか?データを表示するシンプルで直感的な方法を実現するのは驚くほど困難です。アニスセンはさまざまな方法の概要を説明し、選択した方法について注意を促します...
SQL Server 2017またはSQL Server VNext、Azure SQLデータベースの場合、次のようにString_aggを使用できます。
SELECT make.CarMakeId, make.CarMake,
CarModels = string_agg(model.CarModel, ', ')
FROM CarModels model
INNER JOIN CarMakes make
ON model.CarMakeId = make.CarMakeId
GROUP BY make.CarMakeId, make.CarMake
出力:
+-----------+-----------+---------------------------+
| CarMakeId | CarMake | CarModels |
+-----------+-----------+---------------------------+
| 1 | SuperCars | Zoom, Wow, Awesome |
| 2 | MehCars | Mediocrity, YoureSettling |
+-----------+-----------+---------------------------+