2016-11-28 99 views
2

我需要獲得一個表(可能有幾個)從細節表中接收它們的值的列。 詳細資料表格主要有以下欄目:如何選擇詳細信息表條目作爲主表中的列?

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

到目前爲止,我成功地使用:

但這種尺度非常糟糕,當我添加更多的細節。

這將是一個有效的方法來做到這一點?

+1

我想你可以在這裏找到您的問題有所幫助,用[**動態透視**](HTTP://計算器。 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

如果DetailNames是已知的,您可以使用條件彙總:

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