SQL Просмотр вопроса: условно вычисленные столбцы из нескольких таблиц - PullRequest
0 голосов
/ 06 февраля 2020

У меня проблема с разработкой представления для использования. Это представление является соединением между тремя таблицами - однако не каждая строка будет иметь значение из всех трех таблиц - следовательно, 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, просто заполните BuildTime на основе TotalTime?

1 Ответ

0 голосов
/ 06 февраля 2020

Если вы хотите добавить два значения, которые могут быть NULL, тогда используйте coalesce() для значений. Итак:

dbs.TotalTime - coalesce(SUM(del.DelayTime), 0) AS BuildTime

Нет необходимости coalesce() в качестве аргумента sum(), потому что sum() (как и большинство функций агрегирования) игнорирует значения null.

...