1

我有一个 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

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

4

2 回答 2

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

于 2012-10-10T14:50:58.113 回答
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
于 2012-10-10T14:47:38.277 回答