[英]SQL to pick only one record in one-to-many relationship
在下面的当前/潜在客户查询中,我需要显示CustomerID,客户的姓氏以及一列,该列显示客户是否已下达at least
一个订单。 但是,正如预期的那样,如果客户下了多个订单(一对多关系),它将显示客户的多个记录。 问题 :由于我们仅需要报告客户是否已下达至少一个订单,因此在这里如何仅显示每个客户一个记录?
SELECT c.customerID, o.OrderID, CASE When ISNULL(o.OrderID, 0) = 0 Then 0 Else
1 End as YesNO
FROM Customers c
LEFT JOIN Orders o
ON c.customerID = o.customerID
使用outer apply()
select
c.customerID
, o.OrderID
, case when o.OrderID is null then 0 else 1 end as YesNO
from Customers c
outer apply (
select top 1 o.OrderID
from Orders o
where c.customerID = o.customerID
) o
您也可以使用o.OrderId is null
而不是ISNULL(o.OrderID, 0) = 0
。
使用group by
和min()
select
c.customerID
, min(o.OrderID) as OrderId
, case when min(o.OrderID) is null then 0 else 1 end as YesNO
from Customers c
left join Orders o
on c.customerID = o.customerID
group by c.CustomerID
使用分组依据。
SELECT c.customerID, o.OrderID, CASE When ISNULL(o.OrderID, 0) = 0 Then 0 Else 1 End as YesNOFROM Customers cLEFT JOIN Orders o ON c.customerID = o.customerID GROUP BY c.customerID
如果您相信问题的描述,即您想知道某个客户是否已下订单,但不需要为每个客户提供有代表性的OrderId
:
select C.CustomerId,
case when exists ( select 42 from Orders as O where O.CustomerId = C.CustomerId )
then 1 else 0 end as YesNo
from Customers as C;
请注意,当您不需要确切的数字时, exists
比count
更有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.