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 值。