我有一个包含两个表的数据库:Customers
和Services
。
Customer
表包含帐户信息,Services
表包含我公司执行的每项服务的单独记录。
Services
表格与Customer
表格相关联,其中ID
列位于Customers.ID = Services.CustomerID
。
我正在尝试执行查询,该查询仅返回在指定日期范围内执行了多项服务的客户的客户名称和帐号。例如,向我展示2015年我已经完成工作两次以上的所有客户。
如何编写此类查询以便仅返回具有多个服务访问权限的查询?我可以使用游标,计算结果等来做到这一点,但似乎必须有一种更有效的方式。
答案 0 :(得分:2)
只需使用JOIN
和GROUP BY
即可:
SELECT Customers.ID
FROM Customers
JOIN Services ON Customer.ID=Services.CustomerID
--WHERE your Services date check here
GROUP BY Customers.ID -- you can add more columns from the customers table here and in the select as needed
HAVING SUM(1)>1
您可以添加WHERE
子句来过滤Services
'日期范围(就在GROUP BY
之前)。
答案 1 :(得分:0)
从客户C中选择ID,其中包括count(从服务S中选择*,其中C.id = S.CustomersId)> 1
答案 2 :(得分:0)
SELECT Customers.CustomerID
,Customers.Name
,Customers.AcoountNumber
FROM Customers
JOIN
(
select Services.CustomerID, Services.CustomerID as totalServices
from Services
where Services.date BETWEEN @FROM_DATE AND @TO_DATE
group by Services.CustomerID
having count(Services.CustomerID) >1
) AS CustomersMoreThan1 on Customers.CustomerID=CustomersMoreThan1.CustomerID
此查询允许您从Customer表中添加更多列,而无需修改GROUP BY。