我习惯于创建基本查询,所以我被困在一个相当复杂的查询上。
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 个订单,所以有多个结果(这是我想要的)。我把简单的部分记下来了,它工作正常。例子:
SELECT
ORDER Number,
ORDER Line,
Package
FROM TABLE
WHERE (Part Number='A1'
AND SIZE='S'
AND Cost='22.5'
AND Reviewed='Yes')
GROUP BY ORDER Number,
ORDER Line,
Package
HAVING count(ORDER Number)=1
Order Number Order Line Package
0001 1 1
这是我的挑战。我必须排除具有包裹 <> 1 的订单行的结果。因此,我上面示例的结果将被排除,因为对于订单号 0001 - 订单行 1 包含 2 和 3 的包裹。应用此排除项时,我提供的表格中唯一有效的结果应该是......
Order Number Order Line Package
0001 2 1
0002 2 1
0003 1 1
不要担心空值。性能是一个问题(显然),因为它是一个大表。我环顾四周,但我还没有找到任何可靠的解决方案。您的指导将不胜感激。