2014-04-08 49 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

是的,它表示「列'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

想通了!對哈爾和所有評論過的人都非常感謝。

Select A.Name, B.CallCount         
From Employees A Inner Join (Select EmployeeID, Count(*) As CallCount From Calls Where Month(EntryDate) = Month(GetDate()) and Year(EntryDate) = Year(GetDate()) Group By EmployeeID) B 
On A.TechID = B.EmployeeID 
Where A.Name IN ('Steven', 'John', 'Mark', 'Jason', 'Tom') 
Group By A.Name, B.CallCount