从平均结果中排除零

时间:2015-11-25 02:13:05

标签: function tsql

我希望按天名称获得12周平均销售额(IE周一价值12周......) 但我希望不会因为商店关闭而导致零值。Example of 12 Weeks with Zero's

我写了一个脚本来尝试排除Zero的

select 
 de.[Restaurant Name]
,dd.[DayNameOfWeek]
,dd.[FinancialWC]
,AVG([Net]) OVER (PARTITION BY dw.[RedCatID],  dd.DayNameOfWeek 
ORDER BY dw.[RedCatID], dd.[FullDate] ROWS 11 PRECEDING ) as [12 Week]

from Daily_Sales_Summary dw
inner join Restaurant_View de  on de.RedCatID = dw.[RedCatID]
inner join DimDate dd on dd.[DateKey] = dw.[DateKey]
where [net] <> '0'
group by de.[Restaurant Name]
    ,dw.[RedCatID]
    ,dd.[DayNameOfWeek]
    ,dd.[FullDate]
    ,dd.[FinancialWC],[Net]
order by [Restaurant Name] asc

这确实给了我想要的平均值,但是在零值

的日子里没有产生任何结果

Query Results showing missing dates

如何在不错过零零点的情况下如何做到这一点? 如果存在零而不是排除它,如果这是一个更简单的解决方案,我很高兴让它再回去一周。

1 个答案:

答案 0 :(得分:0)

你需要在这里有点创意才能包含行,但不能平均计算它们。尝试下面的代码,看看它是否有效。我还没有测试过它。 基本上,做的是重新定义计算的分母,以给出[NET] <> 0的行数 编辑:找到比我最初发布的更简单的解决方案

select 
 de.[Restaurant Name]
,dd.[DayNameOfWeek]
,dd.[FinancialWC]
,avg(nullif([Net],0)) OVER (PARTITION BY dw.[RedCatID],  dd.DayNameOfWeek 
ORDER BY dw.[RedCatID], dd.[FullDate] ROWS 11 PRECEDING ) 

 as [12 Week]

from Daily_Sales_Summary dw
inner join Restaurant_View de  on de.RedCatID = dw.[RedCatID]
inner join DimDate dd on dd.[DateKey] = dw.[DateKey]
group by de.[Restaurant Name]
    ,dw.[RedCatID]
    ,dd.[DayNameOfWeek]
    ,dd.[FullDate]
    ,dd.[FinancialWC],[Net]
order by [Restaurant Name] asc