2014-02-20 121 views
4

我有一個數據庫中的表是這樣的:SQL Server 2008 R2的子查詢分組,總結和計數

CREATE TABLE dbo.evals (
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [agent_id] [int] NOT NULL, 
    [matrix_1] [int], 
    [matrix_2] [int], 
    [matrix_2] [int]) 

的matrix_(X)列的每個人都有的默認值爲0。當代理正在經理評估並不要求每個矩陣都要輸入。代理商可以每天進行評估。如果輸入矩陣,它將有一個介於1和5之間的值。如果不是,則爲0.我需要創建一個報告,對每個代理的每個矩陣進行求和和平均。在計算平均值時,我不需要計算0值,所以我需要以某種方式計算矩陣值<> 0的計數。報告不是針對一個代理,而是針對一個報告中的所有代理。我試圖通過agent_id與子查詢的一般組得到矩陣計數矩陣<> 0,它不起作用。我想結束的是類似於:

select agent_id, sum(matrix_1)/(count(matrix_1) where matrix_1 <> 0), 
      sum(matrix_2)/(count(matrix_2) where matrix_2 <> 0), 
      sum(matrix_3)/(count(matrix_3) where matrix_3 <> 0) 
group by agent_id 

這只是僞代碼說明所需的結果。我曾嘗試使用子查詢中的每個列使用子查詢中的分組,但沒有奏效。

回答

4

偉大的問題吉姆!這應該做到這一點。如果你想要一個更好的平均水平,投你的價值觀作爲浮動的Avg聚集:

select 
    agent_id, 
    sum(matrix_1) Matrix1Sum, 
    avg(case when matrix_1 > 0 then cast(matrix_1 as float) end) Matrix1Average, 
    sum(matrix_2) Matrix2Sum, 
    avg(case when matrix_2 > 0 then cast(matrix_2 as float) end) Matrix2Average, 
    sum(matrix_3) Matrix3Sum, 
    avg(case when matrix_3 > 0 then cast(matrix_3 as float) end) Matrix3Average 
from evals 
group by 
    agent_id 
+0

@羅恩·史密斯 - 這正是我需要的 - 完美的作品什麼我的要求是 - 謝謝你。 –

+0

非常歡迎您先生! :) –