如何 select 详细说明 table 条目作为主 table 中的列?

How to select details table entries as columns in master table?

我需要获得一个 table,其中(可能有多个)列从详细信息 table 中接收它们的值。 详情table基本有这几栏:

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

但是当我添加更多细节时,这种缩放非常糟糕。

执行此操作的有效方法是什么?

如果 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