I'm looking to summarise data by week from a given starting date into the indefinite future. Typically I would just dump a result set into an Excel dash and group there via pivots etc., but I'm writing this query to hand off to a set of users and allow them access through a front-end BI application, so I want to give it to them as complete as possible.
My current method is obviously inefficient, so I'd love to find a simple formula to do this (or a way to create a variable for the week to cut back on all of the repetitive scripting). I've thought about using DATEADD but haven't been able to make it work yet.
Example of my current solution is below:
SELECT
'Week Ending' = (CASE
WHEN YEAR(duedate) = '2015'
THEN (CASE
WHEN datepart(wk, duedate) = 32 THEN '2015/08/07'
WHEN datepart(wk, duedate) = 33 THEN '2015/08/14'
WHEN datepart(wk, duedate) = 34 THEN '2015/08/21'
WHEN datepart(wk, duedate) = 35 THEN '2015/08/28'
WHEN datepart(wk, duedate) = 36 THEN '2015/09/04'
WHEN datepart(wk, duedate) = 37 THEN '2015/09/11'
WHEN datepart(wk, duedate) = 38 THEN '2015/09/18'
WHEN datepart(wk, duedate) = 39 THEN '2015/09/25'
WHEN datepart(wk, duedate) = 40 THEN '2015/10/02'
WHEN datepart(wk, duedate) = 41 THEN '2015/10/09'
WHEN datepart(wk, duedate) = 42 THEN '2015/10/16'
WHEN datepart(wk, duedate) = 43 THEN '2015/10/23'
WHEN datepart(wk, duedate) = 44 THEN '2015/10/30'
WHEN datepart(wk, duedate) = 45 THEN '2015/11/06'
WHEN datepart(wk, duedate) = 46 THEN '2015/11/13'
WHEN datepart(wk, duedate) = 47 THEN '2015/11/20'
WHEN datepart(wk, duedate) = 48 THEN '2015/11/27'
WHEN datepart(wk, duedate) = 49 THEN '2015/12/04'
WHEN datepart(wk, duedate) = 50 THEN '2015/12/11'
WHEN datepart(wk, duedate) = 51 THEN '2015/12/18'
WHEN datepart(wk, duedate) = 52 THEN '2015/12/25'
WHEN datepart(wk, duedate) = 53 THEN '2016/01/01'
END)
WHEN YEAR(duedate) = '2016'
THEN (CASE
WHEN datepart(wk, duedate) = 1 THEN '2016/01/01'
WHEN datepart(wk, duedate) = 2 THEN '2016/01/08'
WHEN datepart(wk, duedate) = 3 THEN '2016/01/15'
WHEN datepart(wk, duedate) = 4 THEN '2016/01/22'
END)
END),
SUM(linetotal)
FROM
PurchaseOrderDetail
WHERE
YEAR(duedate) > '2014'
GROUP BY
YEAR(duedate), DATEPART(wk, duedate)
I imagine the answer is a simple one, but I haven't been able to find quite what I'm looking for yet.