我習慣於創建基本查詢,所以我被困在一個相當複雜的問題上。排除SQL查詢結果 - 單表
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
不要擔心空值。性能是一個值得關注的問題(顯然),因爲它是一張大桌子。我環顧四周,但我還沒有找到任何可靠的解決方案。您的指導將不勝感激。
什麼RDBMS和版本您使用的(是Oracle 11g,SQL Server 2008中,MySQL的....)請告訴我們 – Lamak
@約翰ķ你爲什麼不只是使用過濾掉那些行哪裏有條件? –