【发布时间】:2014-04-08 14:18:19
【问题描述】:
我正在使用 SQL Server 2008 R2 并有以下查询。我基本上试图返回两列,员工的姓名和他们在当月拨打的电话总数的计数。我已经让查询运行了,但是当它运行时,它需要很长时间,并且它返回大量不正确的数字来计算总调用次数。任何人都可以帮我解决这个问题吗?
Select A.Name, count(1) As TotalCalls
From Calls B INNER JOIN Employees A on B.EmployeeID = A.TechID
Where A.Name IN ('Steven', 'John', 'Mark', 'Jason', 'Tom')
AND Month(B.CreationDate) = Month(GetDate()) and Year(B.CreationDate) = Year(GetDate())
Group By A.Name
编辑: 我已经尝试了以下查询,我想我现在已经很接近了。它返回一个准确的结果集,我只是不确定如何让这个查询只查看当前月份。
Select A.Name, B.CallCount
From Employees A Inner Join (Select EmployeeID, Count(*) As CallCount From Calls Group By EmployeeID) B
On A.TechID = B.EmployeeID
Where A.Name IN ('Steven', 'John', 'Mark', 'Jason', 'Tom')
Group By A.Name, B.CallCount
【问题讨论】:
-
您是否尝试在不使用 group by 的情况下运行查询以查看它是否返回预期的行?
-
是的,它说“列 'A.Name' 在选择列表中无效,因为它不包含在聚合函数中并且没有 GROUP BY 子句。”
-
抱歉复制粘贴错了,我已经编辑了我之前的评论。
-
如果把count(1)和group by去掉怎么办?那必须工作。它是否返回预期结果?
-
如果我拿走该组并计数,它只会列出相关技术名称的重复。我尝试计算调用表的唯一 ID,但它给了我以下错误。 “count 聚合操作不能将 uniqueidentifier 数据类型作为参数。”