如何在主表中选择详细信息表条目作为列?

时间:2016-11-28 14:12:14

标签: sql-server join master detail

我需要从一个详细信息表中获取一个(可能有几个)列接收其值的表。 详细信息表基本上包含以下列:

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

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

SELECT Master.ID,
  (SELECT DetailValue FROM Detail WHERE Master.ID=Detail.MasterID AND DetailName='Name1') as Detail1,
  (SELECT DetailValue FROM Detail WHERE Master.ID=Detail.MasterID AND DetailName='Name2') as Detail2
FROM Master

但是当我添加更多细节时,这会非常严重。

这样做的有效方法是什么?

1 个答案:

答案 0 :(得分: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