Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL esegue la variabile +1 fino a quando la variabile non raggiunge 52?

Se stai pensando in termini di loop, stai percorrendo la strada sbagliata. Devi pensare in termini di logica basata sugli insiemi. Quello che devi fare è eliminare del tutto la variabile @weeknumber e raggruppare i tuoi dati in modo diverso. Vuoi raggruppare per settimane, quindi devi calcolare il numero della settimana. Puoi farlo usando DATEDIFF() e DATEPART(dw,...):

declare @StartDate date
declare @EndDate date
declare @WeekNumber int

set @StartDate = '01/06/2014'
set @EndDate = '07/06/2015'
--set @WeekNumber = 01

select datediff(ww,@startdate,[WeekStartDate])+1 [WeekNumber]
,[WeekStartDate]
,dateadd(dd,6,[WeekStartDate]) [WeekEndDate]
,* 
From (Select t1.LeadSource
                    ,count(t1.prospectid) [Leads]
                    ,sum(t1.Found) [Apps]
                    ,dateadd(dd,2-datepart(dw,t1.CreateDate),t1.CreateDate) WeekStartDate
        from Table T1 
        where t1.CreateDate between @startDate
            and @enddate
GROUP BY f.LeadSource ) f