子查询分组中的Summed列的SQL返回零

时间:2015-12-03 19:50:43

标签: sql sql-server null sum subquery

我有两个子查询,一个返回一组数据并对一个分组中的一个列求和,另一个执行相同但条件是批准日期不为空。然后将两者连接起来并选择以获得如下结果:

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

1 个答案:

答案 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