我有以下2个表格(这里只显示列的总和):
CUSTOMER:id, fname, lname.
SALES_ORDER: id, cust_id, sales_rep.
来自CUSTOMER的id与SALES_ORDER中的cust_id连接。 我需要做的是:返回客户详细信息+该客户的订单数量,对于至少有一个订单由员工编号“129”处理的客户。这是我试过的查询:
SELECT customer.id, fname, lname, count(*)
FROM customer,
sales_order
WHERE customer.id = sales_order.cust_id
GROUP BY customer.id
HAVING sales_rep = 129;
确实会回复那些回答上述内容的客户+他们拥有的订单数量......但在浏览数据库时,我发现还有其他客户端未被查询提取。我究竟做错了什么? 谢谢!
答案 0 :(得分:0)
这个怎么样:
SELECT customer.id, fname, lname, count(*)
FROM customer,
sales_order
WHERE customer.id = sales_order.cust_id
GROUP BY customer.id
HAVING MAX(IIF(sales_rep = 129, 1, 0)) = 1;
这个想法是计算计数,但只显示这些记录,其中sales_rep
至少为129
。我们正在使用IIF
(您可以使用CASE WHEN
用于较早的SQL Server版本)来检查特定记录是针对特定sales_rep
还是MAX
来检查至少一个这样的记录。
如果您不想使用HAVING
,可以使用其他过滤条件过滤行:
SELECT customer.id, fname, lname, count(*)
FROM customer
INNER JOIN sales_order
ON customer.id = sales_order.cust_id
WHERE customer.id IN
(
SELECT DISTINCT customer.id
FROM sales_order
WHERE sales_rep = 129
)
GROUP BY customer.id
我们的想法是计算每个客户的计数,然后使用WHERE
子句仅显示至少有一个sales_rep = 129
的用户。