我在使用之前提出的另一个问题的查询时遇到了问题。我不想添加这个问题,所以我只是开始一个新问题。此方案适用于 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,我不想要它。订单被分成几行,每行row 可以附加多个包。下面是正常工作的查询。
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 语句来完成,但是有没有一种方法可以在这种情况下只用一个查询来完成多个条件?谢谢。