有人可以建议我如何考虑星期日开始周和周六结束,同时在52周的滚动报告中将它们倒数,例如第1周,第2周......第52周
我想把我当前的周作为周日从周日开始,所以即使它的部分周仍然是第1周和上周的周日 - 周六是第2周,依此类推,直到去年的第52周(大致在9月倒计时) )。我需要这个,因为我正在处理每日报告,它将查找本周和过去51周(整周)的销售情况。我的报告也应该返回任何一周没有销售'0'而不跳过它。
答案 0 :(得分:2)
这是一种方式。注意我创建了递归CTE
来填充一些日期。你不必做这一步,真正只需要YourWeekOrder = ...
部分。
declare @startDate date = dateadd(year,-1,getdate())
declare @endDate date = getdate()
;with cte as(
select @startDate as TheDate
union all
select dateadd(day,1,TheDate)
from cte
where TheDate < @endDate)
select
TheDate
,TheWeekOfYear = datepart(week,TheDate)
,YourWeekOrder = dense_rank() over (order by cast(datepart(year,TheDate) as char(4)) + case when len(datepart(week,TheDate)) = 1 then '0' + cast(datepart(week,TheDate) as char(2)) else cast(datepart(week,TheDate) as char(2)) end desc)
from cte
order by
TheDate
option(maxrecursion 0)
<强> SEE IT IN ACTION HERE 强>