sql-server - SQL查看问题:来自多个表的条件计算列
问题描述
我在开发使用视图时遇到问题。此视图是三个表之间的连接 - 但是,并非每一行都会有来自所有三个表的值 - 因此是 LEFT JOIN。下面附上代码:
SELECT
dbs.ID,
dbs.OrderID,
dbs.SystemID,
dbs.SalesOrderNo,
dbs.[LineNo],
dbs.OrderQty,
dbs.ProductionOrder,
dbs.Workstation,
ref.Material,
ref.MaterialDescription,
dbs.Date,
dbs.Status,
dbs.Operator,
dbs.StartTime,
dbs.EndTime,
dbs.TotalTime,
SUM(del.DelayTime) AS DelTime,
ref.BuildTime AS CycleTime,
dbs.TotalTime - SUM(del.DelayTime) AS BuildTime
FROM
[Booms DBS] AS dbs
LEFT JOIN
[Booms Delay Entry] AS del
ON dbs.ID = del.ID
LEFT JOIN
[Booms Reference Master] AS ref
ON dbs.SystemID = ref.SystemID AND dbs.Workstation = ref.Workstation
GROUP BY
dbs.ID,
dbs.OrderID,
dbs.SystemID,
dbs.SalesOrderNo,
dbs.[LineNo],
dbs.OrderQty,
dbs.ProductionOrder,
dbs.Workstation,
ref.Material,
ref.MaterialDescription,
dbs.Date,
dbs.Status,
dbs.Operator,
dbs.StartTime,
dbs.EndTime,
dbs.TotalTime,
ref.BuildTime
在第 18 行和第 20 行中,有基于延迟表中“DelayTime”值的聚合。但是,并非每条记录都与延迟相关联。“BuildTime”是根据“TotalTime”和“DelayTime”值计算的。
但是,似乎当“DelTime”列(DelayTime 的总和)为 NULL(AKA 没有关联的延迟)时,“BuildTime”将不会填充。是否有某种条件我可以添加说明当“DelTime”为 NULL 时,只需根据“TotalTime”填充“BuildTime”?
解决方案
如果要添加两个可能为的值,请在值上NULL
使用coalesce()
。所以:
dbs.TotalTime - coalesce(SUM(del.DelayTime), 0) AS BuildTime
不需要将 tocoalesce()
作为参数sum()
,因为sum()
(像大多数聚合函数一样)忽略null
值。