2014-04-08 2 views
0

SQL Server 2008 R2를 사용 중이고 다음 쿼리가 있습니다. 필자는 본질적으로 직원의 이름과 현재 달에 대해 작성한 총 통화 수의 두 열을 반환하려고했습니다. 나는 쿼리를 실행 시키려고했지만, 꽤 오랜 시간이 걸리며 총 호출 수에 대해 거대한 잘못된 숫자가 반환됩니다. 누구든지 이걸 나에게 줄 수 있니?SQL : 조인 결과 행 개수

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 
+2

그룹없이 쿼리를 실행하여 예상되는 행을 반환했는지 확인 했습니까? – Serpiton

+0

그렇습니다. "Column 'A.Name'은 집계 함수에 포함되어 있지 않고 GROUP BY 절이 없기 때문에 선택 목록에서 유효하지 않습니다." – user3272370

+0

죄송합니다. 잘못된 것을 복사하여 붙여 넣었습니다. 이전의 의견을 수정했습니다. – user3272370

답변

0

이 경우 어떨까요?

Select A.Name, count(A.name) 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 
Order by TotalCalls 
+0

작업에 감사 드리며 해당 쿼리는 각 기술에 대한 결과 집합을 반환합니다. 문제는 TotalCalls에 대해 반환 된 숫자가 수십만 개에서 너무 크다는 것입니다. 그리고 그것이 옳지 않다는 것을 알고 있습니다. 그것이 조인이나 그와 비슷한 것에서 모든 가능한 조합을 세는 것 같아요. – user3272370

+0

글쎄, 다음 그것을 좁히려 고하십시오. 예를 들어, 특정 달 동안 Steven의 전화를 받으십시오. 전화가 체크 아웃되는지 확인하십시오. 만약 그렇다면 나머지 개월은 어떨까요? –

+0

여기에서 http://sqlfiddle.com/을 사용하십시오. 내가 사용할 수있는 데이터 세트를 주겠다. 내가 도울 수 있는지 보아라. –

0

알아 냈어! 할에게 감사 드리고 다른 모든 사람들은 댓글을 달았습니다.