0

会'尝试使这个快速......下面的查询。

SELECT PriorityDefID, MilestoneDefID, MilestoneName, ContactName, 
IIF(PriorityDefID = 1, (SELECT BonusDaysFH FROM milestone_def WHERE (( MilestoneDefID = IIF(MilestoneDefID = 5, 5, IIF(MilestoneDefID = 6, 6, IIF(MilestoneDefID = 7, 7))) )) ), 
IIF(PriorityDefID = 2, (SELECT BonusDaysFM FROM milestone_def WHERE (( MilestoneDefID = IIF(MilestoneDefID = 5, 5, IIF(MilestoneDefID = 6, 6, IIF(MilestoneDefID = 7, 7))) )) ),
IIF(PriorityDefID = 3, (SELECT BonusDaysFL FROM milestone_def WHERE (( MilestoneDefID = IIF(MilestoneDefID = 5, 5, IIF(MilestoneDefID = 6, 6, IIF(MilestoneDefID = 7, 7))) )) ) ))) AS BonusDaysAllotted,
StartDate, EndDate
FROM GetPerformance
WHERE (((MilestoneDefID) = 5 Or (MilestoneDefID) = 6 Or (MilestoneDefID) = 7));

我最终试图获取 MilestoneDefID 的值并在子查询中重用它以确定要返回的 BonusDays 列。子查询希望返回三行,其结果是传递每个值 5、6 和 7。对于从 GetPerformance 查询返回的每一行,我希望它从该行获取 MilestoneDefID,然后进入子查询并传递该 MilestoneDefID返回正确数量的 BonusDays。

4

1 回答 1

1

我说union在这个查询中使用。

select a.PriorityDefID, a.MilestoneDefID, a.MilestoneName, a.ContactName,
    b.BonusDaysFH as BonusDaysAllotted, a.StartDate, a.EndDate
from GetPerformance a, milestone_def b
where ((a.MilestoneDefID=5) or (a.MilestoneDefID=6) or (a.MilestoneDefID=7))
    and b.MilestoneDefID=a.MilestoneDefID
    and a.PriorityDefID=1
union
select a.PriorityDefID, a.MilestoneDefID, a.MilestoneName, a.ContactName,
    b.BonusDaysFM as BonusDaysAllotted, a.StartDate, a.EndDate
from GetPerformance a, milestone_def b
where ((a.MilestoneDefID=5) or (a.MilestoneDefID=6) or (a.MilestoneDefID=7))
    and b.MilestoneDefID=a.MilestoneDefID
    and a.PriorityDefID=2
union
select a.PriorityDefID, a.MilestoneDefID, a.MilestoneName, a.ContactName,
    b.BonusDaysFL as BonusDaysAllotted, a.StartDate, a.EndDate
from GetPerformance a, milestone_def b
where ((a.MilestoneDefID=5) or (a.MilestoneDefID=6) or (a.MilestoneDefID=7))
    and b.MilestoneDefID=a.MilestoneDefID
    and a.PriorityDefID=3

遗憾的是,这将产生三个查询,但我相信缺少 Iif 会提高性能。

于 2013-07-19T15:27:01.970 回答