2014-07-09 31 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') 
相关问题