SQL 查看问题:来自多个表的条件计算列
SQL View Question: Conditional calculated columns from multiple tables
我在开发要使用的视图时遇到问题。此视图是三个 tables 之间的连接 - 然而,并非每一行都具有来自所有三个 tables 的值 - 因此是 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 行中,有基于延迟 table 的 "DelayTime" 值的聚合。但是,并非每个记录都与延迟相关联。 "BuildTime" 是根据 "TotalTime" 和 "DelayTime" 值计算得出的。
但是,似乎当 'DelTime' 列(DelayTime 的总和)为 NULL(即没有关联的延迟)时,"BuildTime" 将不会填充。是否有某种条件我可以补充说,当 'DelTime' 为 NULL 时,只需根据 "TotalTime"?
填充 "BuildTime"
如果您想添加两个可能为 NULL
的值,请对这些值使用 coalesce()
。所以:
dbs.TotalTime - coalesce(SUM(del.DelayTime), 0) AS BuildTime
不需要 coalesce()
作为 sum()
的参数,因为 sum()
(像大多数聚合函数一样)忽略 null
值。
我在开发要使用的视图时遇到问题。此视图是三个 tables 之间的连接 - 然而,并非每一行都具有来自所有三个 tables 的值 - 因此是 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 行中,有基于延迟 table 的 "DelayTime" 值的聚合。但是,并非每个记录都与延迟相关联。 "BuildTime" 是根据 "TotalTime" 和 "DelayTime" 值计算得出的。
但是,似乎当 'DelTime' 列(DelayTime 的总和)为 NULL(即没有关联的延迟)时,"BuildTime" 将不会填充。是否有某种条件我可以补充说,当 'DelTime' 为 NULL 时,只需根据 "TotalTime"?
填充 "BuildTime"如果您想添加两个可能为 NULL
的值,请对这些值使用 coalesce()
。所以:
dbs.TotalTime - coalesce(SUM(del.DelayTime), 0) AS BuildTime
不需要 coalesce()
作为 sum()
的参数,因为 sum()
(像大多数聚合函数一样)忽略 null
值。