【发布时间】:2017-05-02 17:37:59
【问题描述】:
在当前/潜在客户的以下查询中,我需要显示 CustomerID、Customer's LastName,以及显示客户是否下过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
【问题讨论】:
-
为什么不使用 CASE 语句而不是使用计数来检查订单数是否大于或等于 1
-
SELECT c.customerID, min(o.OrderID), case when coalesce(count(o.orderID),0) >0 then 1 else 0 end from ... group by c.customerID, o.OrderID -
@xQbert 将返回多行,因为您仍在按
o.OrderId... 分组,使用min(o.OrderID)(或max())可以解决此问题。 -
@sqlzim...这是真的...
SELECT c.customerID, min(o.OrderID), case when coalesce(count(o.orderID),0) >0 then 1 else 0 end from ... group by c.customerID并从 group by 中删除 o.orderId! -
“问题:我们如何只在此处显示每个客户的一条记录,因为我们只需要报告客户是否至少下了一个订单?”表示您不需要返回
OrderId,只需返回YesNo?
标签: sql sql-server tsql sql-server-2012 left-join