2015-11-25 138 views
1

我希望获得按星期的名称(IE 12周的周一价值)的12周平均销售额...) 但我不想因商店关闭而可能发生零价值。 Example of 12 Weeks with Zero's从平均结果中排除零

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

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

如何我是否会这样做而不会错过零空值的几周? 我很高兴让它返回一个多星期,如果零存在,而不是排除它,如果这是一个更简单的解决方案..

回答

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