【问题标题】:Combining IFNULL, SUM and WHERE function to show available amount结合 IFNULL、SUM 和 WHERE 函数来显示可用金额
【发布时间】:2019-06-21 16:33:29
【问题描述】:

我想通过查询返回可用库存值,其中订单金额从总库存中扣除,订单金额 = 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

【问题讨论】:

  • 有趣的是,此查询的某些部分不会像第一个子查询中缺少对 dbo.[Logistic Items] 的表引用一样出错。此外,子查询的算术表达式也应该放在GROUP BY 中,因为它们是顶级查询中的非聚合列。
  • 只是性能说明,不要按 varchar 列分组。按项目 ID 分组,然后加入 Items 表。
  • @Niek 。 . .我怀疑有一种更简单的方法来编写查询。考虑用样本数据、期望的结果和所需逻辑的解释提出另一个问题。

标签: sql sql-server aggregate ifnull


【解决方案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

【讨论】:

  • 哇,这行得通。我之前尝试过将 ISNULL 函数放在本节前面,但出现了错误……非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 2014-07-29
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多