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

Я хочу вернуть доступную стоимость акций через запрос, в котором сумма по заказам вычитается из общей суммы запасов, а сумма по заказу = 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 at:

(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 Ответ

0 голосов
/ 28 января 2019

Просто позвоните 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...