【发布时间】:2019-08-20 08:42:06
【问题描述】:
我正在使用 Microsoft SQL Server Management Studio 2018 进行查询,我正在尝试获取每个订单的“Cavity”零件类型的总量,我注意到 1 个订单有一些异常情况。我 99% 确信它已正确添加到 SQL 数据库中,因为每个订单都是在 Access 中首先创建的,并且该订单的 .mdb 文件只有 40 个“腔”部分。但是,当我运行 SQL 查询时,我得到 248 个,共 248 个部分。
到目前为止,我已经尝试过使用代码、不同的连接、在 SELECT 和 GROUP BY 子句中删除/添加不同的列,并且只使用 NOT LIKE 方法过滤掉部分有帮助。
以下代码(用于显示差异的 2 个订单)返回 2 列和 2 行(如预期的那样):
SELECT OrderNo, SUM(Quantity) FROM Orders
INNER JOIN Heading ON Orders.OrderID = Heading.OrderID
WHERE ComponentType LIKE 'Cavity' AND OrderNo LIKE '73966' OR OrderNo LIKE '73967'
GROUP BY OrderNo, Quantity
但是,我知道订单 73966 有 40 个型腔部件(正确),而订单 73967 有 248 个(不正确)。
当我尝试更改查询并添加 ComponentType(到 SELECT 和 GROUP BY)时,我得到了:
Order | Quantity | ComponentType
73966 40 Cavity
73967 16
73967 60 Bead type
73967 40 Cavity
73967 8 Cill
73967 42 Frame
73967 48 Sash
etc...
添加以下内容有助于过滤掉不需要的组件,但我认为没有必要获得正确的结果,因为将来添加任何其他内容将迫使我更新查询。
WHERE (...) AND ComponentType NOT LIKE '%Bead type%'
我认为值得一提的是,两个订单具有相同的组件类型(Bead type、Cavity、Cill),只是订单号 73967 没有正确显示。有什么想法为什么我需要手动过滤此订单的所有其他零件类型而不是 SQL 为我过滤?
【问题讨论】:
-
Orderno 是字符列吗?为什么?
-
WHERE ComponentType LIKE 'Cavity' AND OrderNo IN ('73966', '73967') -
为什么要
OrderNo LIKE '73966'?为什么不OrderNo = 73966? -
另外,你为什么要在
Quantity上执行SUM并对其进行分组? -
似乎您以错误的方式使用 OR 子句尝试使用 WHERE ComponentType LIKE 'Cavity' AND (OrderNo LIKE '73966' OR OrderNo LIKE '73967') .. 或如上面建议的那样使用 IN 子句
标签: sql sql-server