2012-10-10 100 views
1

我有一個Microsoft SQL服務器樞查詢得到的值之和,每個類別行,每月列1至12SQL Server的支點平均

我現在有13列的查詢返回的,例如,無四月後的數據:

Category [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 
----------------------------------------------------------------------------------- 
Food  150 200 0  125 null null null null null null null null 
Drink  140 0  90 115 null null null null null null null null 

每個類別,我需要添加值的總和,以及忽略無數據的月份的平均值。 對於上述數據,我需要添加列:

Sum Average 
475 118.75 
345  86.25 

我嘗試了許多不同的方法,但我無法找到一個方法。

+1

你可以發佈您的原始查詢,表結構和一些樣本數據?可能有幾種方法可以做到這一點,並看到這些信息會有所幫助。 – Taryn

回答

2

這個查詢怎麼樣?

Select * 
From 
(
    Select ItemName as Itm, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12] 
    From 
    (
     Select ItemName, Month(EffectiveDate) as Mon, Val 
      From Items 

    ) as SourceTable 
    Pivot 
    (
     Sum(Val) 
     For Mon in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
    ) as PivotTable 
) A 
Cross Apply (Select SUM(Val) as SumVal, AVG(Val) as AvgVal From Items i Where i.ItemName = a.Itm) b 

參見圖:

http://s18.postimage.org/lwbovyy49/results.jpg

+0

謝謝,這是一個乾淨的解決方案。 –

0

我知道這看起來很愚蠢,但它會做的。 :-)

Select Category,(isnull(f1,0)+isnull(f2,0)+isnull(f3,0)) as sumall, 
isnull((isnull(f1,0)+isnull(f2,0)+isnull(f3,0)),1)/isnull(nullif((0+(isnull(nullif(isnull(f1,isnull(f1,0)),f1),1))+(isnull(nullif(isnull(f2,isnull(f2,0)),f2),1))+(isnull(nullif(isnull(f3,isnull(f3,0)),f3),1))),0),1) as avr 
from MyTable 
+1

哦,不! :P。這太多了! – TCM

+0

對不起,我的例子只有3個月。複製/粘貼所有f場匹配12個月。 :-) – Romo

+0

真棒! :) 爲什麼不?? :-) – TCM