SQL Server枢轴平均值

时间:2012-10-10 13:33:32

标签: sql-server sql-server-2008 sum pivot average

我有一个Microsoft SQL服务器透视查询,它获取每个类别的行数和每月第1列到第12行的值的总和

我目前在查询中返回了13列,例如,在4月之后没有数据:

 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

我尝试了很多不同的方法,但我找不到办法。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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