检查单个列中的多个值以获得相同的引用

时间:2013-02-26 17:17:22

标签: sql sql-server tsql sql-server-2005

我有一些像这样的行:

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

我想提取所有其他任何城市的城市为奥斯汀 AND 的OrderNumbers。在上面的例子中,我应该得到订单1001和1003但不是1002.

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 with Demo