0

我有一些这样的行:

Table: Orders
OrderNumber     City
------------------------
1001            Austin
1001            Dallas
1001            Houston
1001            Miami
1002            Austin
1003            Austin
1003            Dallas

我想提取所有将 City 作为 Austin任何其他城市的 OrderNumber。在上面的例子中,我应该得到订单 1001 和 1003,而不是 1002。

实现这一目标的最佳方法是什么?

4

2 回答 2

2

另一种可能的方法是有两个 CTE(通用表表达式) - 一个用于所有Austin订单,另一个用于所有其他订单 - 并加入这些OrderNumber

WITH AustinOrders AS
(
    SELECT OrderNumber FROM Orders WHERE City = 'Austin'
), OtherOrders AS 
(
    SELECT OrderNumber FROM Orders WHERE City <> 'Austin'
)
SELECT
    DISTINCT ao.OrderNumber
FROM AustinOrders ao
INNER JOIN OtherOrders oo ON ao.OrderNumber = oo.OrderNumber

产生以下结果:

OrderNumber
-----------
   1001
   1003
于 2013-02-26T17:29:20.027 回答
1

您应该能够使用:

select *
from orders o1
where o1.city = 'Austin'
  and exists (select ordernumber
              from orders o2
              where o1.ordernumber = o2.ordernumber
              group by ordernumber
              having count(distinct city) >1)

请参阅带有演示的 SQL Fiddle

于 2013-02-26T17:24:11.260 回答