【发布时间】: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