2016-11-28 15 views
2

詳細テーブルから値を受け取った(潜在的に複数の)列を持つ単一の表を取得する必要があります。 は、詳細テーブルは、基本的にこれらの列があります。詳細テーブルエントリをマスターテーブルの列として選択するにはどうすればよいですか?

DetailID, 
MasterID (foreign key to master ID), 
DetailName (nvarchar()), 
DetailValue (nvarchar()) 

これまでのところ、私は使用して成功しました:

が、私はより多くの詳細を追加する場合、これは非常にひどくスケール。

これを行う効率的な方法は何でしょうか? DetailNamesが知られている場合

+1

を[**ダイナミックピボット**](のhttp://のstackoverflow。 com/questions/10404348/sql-server-dynamic-pivot-query) –

+1

[eav](https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model)は、結局のところ、パターン:-) –

+0

リンクありがとうございました。私は今までこの名前でこのパターンを知らなかった。この部分はデータモデル全体ではなく、任意の追加情報をビジネスオブジェクトに追加できる部分のみであるため、可能性のある否定的な影響がそのまま残っていると思います。 – Mav

答えて

0

は、あなたが条件付きの集約を使用することができます:私はあなたと、ここにあなたの問題のいくつかの助けを見つけることができると思い

SELECT m.ID, 
     MAX(CASE WHEN d.DetailName='Name1' THEN d.DetailValue END) as detail1, 
     MAX(CASE WHEN d.DetailName='Name2' THEN d.DetailValue END) as detail2, 
     ... 
FROM Master m 
JOIN Detail d 
ON m.ID=d.MasterID 
GROUP BY m.ID 
+0

ありがとうございます - 詳細値が数値ではないのでMAX()を考慮しませんでしたが、うまくいきます! – Mav

関連する問題