SQL Return 子查询分组中的总和列为零
SQL Return Zero For Summed Column In Subquery Grouping
我有两个子查询,一个返回一组数据并对分组中的一列求和,另一个做同样的事情但条件是批准日期不为空。然后将两者连接起来并从中进行选择,得到如下结果:
ID
- Requested
- Approved
如果我现在 运行 它,它 returns 类似于 1 - 2 - NULL,因为我正在测试的记录未获批准。在这种情况下,我希望 "Approved" 列显示 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
您可以使用条件聚合以更简单的方式进行。根据需要更改 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
我有两个子查询,一个返回一组数据并对分组中的一列求和,另一个做同样的事情但条件是批准日期不为空。然后将两者连接起来并从中进行选择,得到如下结果:
ID
- Requested
- Approved
如果我现在 运行 它,它 returns 类似于 1 - 2 - NULL,因为我正在测试的记录未获批准。在这种情况下,我希望 "Approved" 列显示 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
您可以使用条件聚合以更简单的方式进行。根据需要更改 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