Now am not sure about your sum column ... u want to sum based on that week??
DECLARE @Month Varchar (10)='7'
DECLARE @Year Varchar (10)='2015'
DECLARE @STARTDATE datetime=@Month+'/01/'+@year
DECLARE @ENDDATE datetime= DATEADD (dd, -1, DATEADD(mm, DATEDIFF(mm, 0, @STARTDATE) + 1, 0))
DECLARE @WEEKCOUNT INT
DECLARE @TOTALDAYS int
SELECT @WEEKCOUNT = DATEDIFF(WEEK,@STARTDATE,@ENDDATE)
SELECT @TOTALDAYS = case when @WEEKCOUNT<8 then @WEEKCOUNT else (month(@ENDDATE)-month(@STARTDATE))+1 end
;WITH A
as
(
SELECT 1 as 'WEEK',
CASE WHEN @WEEKCOUNT < 8 THEN DATEADD(dd, -(DATEPART(dw, @STARTDATE))+1, @STARTDATE)
ELSE DATEADD(dd, -(DAY(@STARTDATE)-1), @STARTDATE) END [WeekStart],
CASE WHEN @WEEKCOUNT < 8 THEN DATEADD(dd, 7-(DATEPART(dw, @STARTDATE))+1, @STARTDATE)
else DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@STARTDATE)+1,0)) end [WeekEnd]
union all
SELECT a.week+1 as 'Week',
CASE WHEN @WEEKCOUNT < 8 THEN DATEADD(dd, -(DATEPART(dw, @STARTDATE+(7*(a.week+1))))+2, @STARTDATE+(7*(a.week+1)))
ELSE DATEADD(dd, -(DAY(@STARTDATE+(30*(a.week+1)))-1), @STARTDATE+(30*(a.week+1))) END [WeekStart],
CASE WHEN @WEEKCOUNT < 8 THEN DATEADD(dd, 7-(DATEPART(dw, @STARTDATE+(7*(a.week+1))))+1, @STARTDATE+(7*(a.week+1)))
else DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@STARTDATE+(30*(a.week+1)))+1,0)) end [WeekEnd]
from A a where (a.week+1)<=@TOTALDAYS
)
SELECT 'Week '+ + Convert(Varchar(10),Week) as Week,WeekStart,WeekEnd from A
Please mark as helpful and propose as answer if you find this as correct!!! Thanks,Dia Agha .
No comments:
Post a Comment