SQL Query仅返回具有多行的记录

时间:2016-02-05 16:29:08

标签: sql sql-server

我有一个包含两个表的数据库:CustomersServices

Customer表包含帐户信息,Services表包含我公司执行的每项服务的单独记录。

Services表格与Customer表格相关联,其中ID列位于Customers.ID = Services.CustomerID

我正在尝试执行查询,该查询仅返回在指定日期范围内执行了多项服务的客户的客户名称和帐号。例如,向我展示2015年我已经完成工作两次以上的所有客户。

如何编写此类查询以便仅返回具有多个服务访问权限的查询?我可以使用游标,计算结果等来做到这一点,但似乎必须有一种更有效的方式。

3 个答案:

答案 0 :(得分:2)

只需使用JOINGROUP 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。