我有两个子查询,一个返回一组数据并对一个分组中的一个列求和,另一个执行相同但条件是批准日期不为空。然后将两者连接起来并选择以获得如下结果:
ID
- Requested
- Approved
如果我现在运行它,它会返回类似1 - 2 - NULL的内容,因为我正在测试的记录未被批准。在这种情况下,我希望“已批准”列显示0而不是“NULL”。我已经足够新复杂的查询,我不知道如何做到这一点,但我确信这是可能的。
顺便说一句,这是使用MS SQL服务器,因此如果它更容易,T-SQL之类的就好了。
这是现在的查询:
select sr.ItemID, Requested, Approved from
(select sri.ItemID, Requested = sum(sri.Quantity) from SupplyRequestItem as sri inner join
SupplyRequest as sr on sr.ID = sri.RequestID
group by sri.ItemID) as sr left outer join
(select sri.ItemID, Approved = sum(sri.Quantity) from SupplyRequestItem as sri inner join
SupplyRequest as sr on sr.ID = sri.RequestID
where sr.ApprovedDate is not null
group by sri.ItemID) as asr on sr.ItemID = asr.ItemID
答案 0 :(得分:3)
您可以使用条件聚合以更简单的方式执行此操作。根据您的需要更改case
表达式。
select sri.ItemID,
Requested = sum(case when sr.ApprovedDate is null then sri.Quantity else 0 end),
Approved = sum(case when sr.ApprovedDate is not null then sri.Quantity else 0 end)
from SupplyRequestItem as sri
inner join SupplyRequest as sr on sr.ID = sri.RequestID
group by sri.ItemID