我有一张表(订单),其中有许多销售订单和许多客户,通常是同一客户的许多订单。但我正在尝试找到那些针对单个客户的订单,而且我不希望看到同一客户有多个订单的订单。我的例子可能有所帮助。
╔══════════╦══════════════╗
║ Customer ║ Order Number ║
╠══════════╬══════════════╣
║ ABC ║ 123 ║
║ ABC ║ 456 ║
║ XYZ ║ 789 ║
║ MNO ║ 987 ║
║ XYZ ║ 654 ║
╚══════════╩══════════════╝
所以在这个例子中,我只想看到客户MNO和订单号987,因为该客户只有一个条目。
答案 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