我有一个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
我尝试了很多不同的方法,但我找不到办法。
答案 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
见图:
答案 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