Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL exécute la variable +1 jusqu'à ce que la variable atteigne 52 ?

Si vous pensez en termes de bouclage, vous vous trompez de chemin. Vous devez penser en termes de logique basée sur les ensembles. Ce que vous devez faire est de vous débarrasser complètement de la variable @weeknumber et de simplement regrouper vos données différemment. Vous souhaitez regrouper par semaines, vous devez donc calculer le numéro de la semaine. Vous pouvez le faire en utilisant DATEDIFF() et 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