我在之前提出的另一个问题中使用的查询遇到了问题。我不想添加这个问题,所以我只是开始一个新的问题。此场景适用于 SQL Server 2008。
Order Number Order Line Package Part Number Size Cost Reviewed
0001 1 1 A1 S 22.5 Yes
0001 1 1 B2 M 33.1 Yes
0001 1 1 C3 L 11.2 Yes
0001 1 2 A1 XL 15.0 Yes
0001 1 3 A2 M 12.0 Yes
0001 2 1 D1 S 42.9 Yes
0002 1 1 B4 L 72.5 No
0002 1 2 A7 XXL 66.7 No
0002 2 1 C1 XL 11.8 Yes
0002 2 1 B1 S 22.3 Yes
0003 1 1 A1 L 55.2 Yes
我想选择订单号、订单行和包装。我必须按零件号、尺寸、成本以及是否经过审查进行搜索。这个表有大约30,000个订单,所以会有多个结果(这就是我想要的)。我必须排除具有包 <> 1 的订单行的结果。换句话说,如果订单行具有包 <> 1,我不想要订单行的实例。一个订单被分成几行,每行行可以附加多个包。下面是正确运行的查询。
SELECT
ORDERNumber,
ORDERLine,
Package
FROM
orders a
WHERE NOT EXISTS (SELECT *
FROM orders AS b
WHERE a.ordernumber = b.ordernumber
AND a.orderline = b.orderline
AND b.Package <> 1)
GROUP BY
ORDERNumber,
ORDERLine,
Package
这是上面示例查询的结果(正确满足我的要求)...
ORDERNUMBER ORDERLINE PACKAGE
0001 2 1
0002 2 1
0003 1 1
当我尝试添加多个条件时,出现了我遇到的问题。例如...
SELECT
ORDERNumber,
ORDERLine,
Package
FROM
orders a
WHERE (REVIEWED = 'Yes' AND SIZE = 'L') OR (REVIEWED = 'Yes' AND SIZE = 'S')
AND NOT EXISTS (SELECT *
FROM orders AS b
WHERE a.ordernumber = b.ordernumber
AND a.orderline = b.orderline
AND b.Package <> 1)
GROUP BY
ORDERNumber,
ORDERLine,
Package
给我以下结果(不符合我的要求)...
ORDERNUMBER ORDERLINE PACKAGE
0001 1 1
0001 2 1
0002 2 1
0003 1 1
订单号 0001,订单行 1 无效,因为它的包装值为 2 和 3。看来我的条件顺序有问题?我尝试过使用这些条件,但没有得到我想要的结果。我知道这可以通过两个单独的查询和一个 UNION 语句来完成,但是有没有一种方法可以在这种情况下仅用一个查询来执行多个条件?谢谢。
最佳答案
更改您的查询并在 OR
之间添加括号参数:
((REVIEWED = 'Yes' AND SIZE = 'L') OR (REVIEWED = 'Yes' AND SIZE = 'S'))
完整的查询如下所示:
SELECT
ORDERNumber,
ORDERLine,
Package
FROM
orders a
WHERE ((REVIEWED = 'Yes' AND SIZE = 'L') OR (REVIEWED = 'Yes' AND SIZE = 'S'))
AND NOT EXISTS (SELECT *
FROM orders AS b
WHERE a.ordernumber = b.ordernumber
AND a.orderline = b.orderline
AND b.Package <> 1)
GROUP BY
ORDERNumber,
ORDERLine,
Package
因为您的原始查询首先被评估(REVIEWED = 'Yes' AND SIZE = 'L')
如果不匹配则 (REVIEWED = 'Yes' AND SIZE = 'S'))
AND NOT EXISTS (SELECT *
FROM orders AS b
WHERE a.ordernumber = b.ordernumber
AND a.orderline = b.orderline
AND b.Package <> 1)
被评价。正如您所看到的,您的存在语句与第二次检查相关联。
关于sql - 排除多个条件的SQL查询结果-单表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148598/