Объединение функций IFNULL, SUM и WHERE для отображения доступного количества

Я хочу вернуть доступную стоимость акций с помощью запроса, в котором сумма заказов вычитается из общей суммы запасов, а сумма заказа - = NULL превращается в 0, Таким образом, если в заказах нет открытых позиций, он просто показывает общий запас. В противном случае необходимо вычесть несколько предметов на складе.

Отказ от ответственности: Относительно новичок в более сложных запросах, поэтому любое объяснение того, что я делаю неправильно, будет невероятно полезным в будущем!

В настоящее время пытаясь запросить SQL Server, я дошел до того, что я могу заставить большую часть запроса работать, кроме ISNULL функция

SELECT dbo.[Items].[Productcode Customer], 
       dbo.[Items].Description, 
       dbo.[Items].[Description 2],
       dbo.[Items].[EAN Code], 

       (SELECT SUM(dbo.[Entry].[Quantity]) 
        FROM dbo.[Entry] 
        WHERE dbo.[Logistic Items].No_ = dbo.[Entry].[Item SKU No_]) -

       (SELECT SUM(dbo.[Order Lines].[Quantity (Base)]) 
        FROM dbo.[Order Lines] 
        WHERE dbo.[Items].No_ = dbo.[Order Lines].[Item No_] 
          AND dbo.[Order Lines].[Document No_] LIKE '%UIT%') AS Quant_avail

FROM dbo.[Items] 
LEFT JOIN dbo.[Order Lines] ON dbo.[Items].No_ = dbo.[Order Lines].[Master Item No_]

WHERE dbo.[Items].[Customer Code] = 'KL0134'

GROUP BY
    "Items"."No_",
    "Items"."Productcode Customer",
    "Items".Description,
    "Items"."Description 2",
    "Items"."EAN Code"

WHERE Функция должна указывать, что только исходящие заказы должны быть вычтены.

Я получаю все поля, которые хочу, но столбец Quant_avail показывает только NULL, Это имеет смысл, потому что на заказах нет товаров. Все, что мне нужно сделать сейчас, это преобразовать NULL поле для 0 в:

(SELECT SUM(dbo.[WMS Order Lines].[Quantity (Base)]) 
 FROM dbo.[WMS Order Lines] 
 WHERE dbo.[Logistic Items].No_ = dbo.[WMS Order Lines].[Master Item No_] 
   AND dbo.[WMS Order Lines].[Document No_] LIKE '%UIT%') AS Quant_avail

1 ответ

Просто позвони ISNULL с вашим оригиналом Quant_avail в качестве параметра:

ISNULL(
    (SELECT SUM(dbo.[WMS Order Lines].[Quantity (Base)]) 
    FROM dbo.[WMS Order Lines] 
    WHERE dbo.[Logistic Items].No_ = dbo.[WMS Order Lines].[Master Item No_] 
    AND dbo.[WMS Order Lines].[Document No_] LIKE '%UIT%')
, 0) AS Quant_avail
Другие вопросы по тегам