2014-07-09 35 views
2

我簡要的問題是進行如下的(不同的項目銷售訂單上)的所有項目......選擇匹配字段「A」,其中匹配的領域之一包含一個獨立的領域

銷售訂單行

Sales Order Number  Item Number   Category   
1001      aaa     Z 
1001      bbb     X 
1001      ccc     Y 
1002      bbb     X 
1002      eee     W 
1003      ttt     S 
1003      rrr     P 
1004      bbb     X 
1005      eee     W 

我想顯示所有銷售訂單在銷售訂單中包含與該類別中的項目X

所以結果可能會出現這樣的事情;

Sales Order Number  Item Number   Category   
1001      aaa     Z 
1001      bbb     X 
1001      ccc     Y 
1002      bbb     X 
1002      eee     W 
1004      bbb     X 

爲1003和1005包含有X類

+0

遺憾的SQL Server 2012 – JustAnAverageSQLuser

回答

1

沒有任何項目的Exists條款應被罰款。

select * 
from <yourTable> t1 
where exists (select null 
       from <yourTable> 
       where t1.salesordernumber = salesordernumber 
       and category = 'X') 
+0

非常感謝,設法利用你的代碼在我的查詢如下 – JustAnAverageSQLuser

0

很容易的與EXISTS

SELECT * 
FROM orders o 
WHERE EXISTS (
    SELECT 1 
    FROM ORDERS o2 
    WHERE o.[Sales Order Number] = o2.[Sales Order Number] 
    AND o2.Category = 'X' 
) 
0

這裏是不存在一個選項,如果你喜歡:

SELECT * FROM MY_TABLE 
WHERE [Sales Order Number] in 
    (SELECT DISTINCT [Sales Order Number] from MY_TABLE where [Category] = 'X') 

我不傾向於喜歡的相關子查詢,因爲我看到他們的表現在某些情況下會比其他情況下降低,但是YMMV。迄今爲止所有的反應都應該起作用。

+0

謝謝你們,我的查詢竟然是相當大的,因爲它連接的約6張桌子和許多不同的連接等,但我用EXISTS非常感謝! – JustAnAverageSQLuser

0

試試這個:

SELECT * 
FROM SalesOrders 
WHERE SalesOrderNumber IN 
     (SELECT DISTINCT SalesOrderNumber 
     FROM SalesOrders 
     WHERE Category = 'X') 
相關問題