If one or more columns are not zero, then they are averaged as you expected.
To obtain a null when all are zero:
select (week1+week2+week3+week4+week5)/
nullif(
case when week1=0 then 0 else 1 end +
case when week2=0 then 0 else 1 end +
case when week3=0 then 0 else 1 end +
case when week4=0 then 0 else 1 end +
case when week5=0 then 0 else 1 end,
0)
from ....
To obtain a zero when all are zero:
select
coalesce((week1+week2+week3+week4+week5)/
nullif(
case when week1=0 then 0 else 1 end +
case when week2=0 then 0 else 1 end +
case when week3=0 then 0 else 1 end +
case when week4=0 then 0 else 1 end +
case when week5=0 then 0 else 1 end,
0),0)
from ....
And if you want to be safe with null on columns:
select
coalesce((
coalesce(week1,0) +
coalesce(week2,0) +
coalesce(week3,0) +
coalesce(week4,0) +
coalesce(week5,0)
)/
nullif(
case when coalesce(week1,0)=0 then 0 else 1 end +
case when coalesce(week2,0)=0 then 0 else 1 end +
case when coalesce(week3,0)=0 then 0 else 1 end +
case when coalesce(week4,0)=0 then 0 else 1 end +
case when coalesce(week5,0)=0 then 0 else 1 end,
0),0)
from ....