在Oracle

时间:2015-11-09 12:41:38

标签: sql oracle

我有一张表(订单),其中有许多销售订单和许多客户,通常是同一客户的许多订单。但我正在尝试找到那些针对单个客户的订单,而且我不希望看到同一客户有多个订单的订单。我的例子可能有所帮助。

╔══════════╦══════════════╗
║ Customer ║ Order Number ║
╠══════════╬══════════════╣
║   ABC    ║     123      ║
║   ABC    ║     456      ║
║   XYZ    ║     789      ║
║   MNO    ║     987      ║
║   XYZ    ║     654      ║
╚══════════╩══════════════╝

所以在这个例子中,我只想看到客户MNO和订单号987,因为该客户只有一个条目。

2 个答案:

答案 0 :(得分:5)

嗯,你可以用聚合来做到这一点:

select customer, min(OrderNumber) as OrderNumber
from t
group by customer
having count(*) = 1;

只有一行,min()会返回该行的订单号。

另一种方法是not exists

select t.*
from t t
where not exists (select 1
                  from t t2
                  where t2.customer = t.customer and t2.OrderNumber <> t.OrderNumber
                 );

这样可以让您检索更多列。

答案 1 :(得分:2)

尝试以下内容

A