sql >> Databasteknik >  >> RDS >> Sqlserver

SQL köra variabel +1 tills variabel når 52?

Om du tänker i termer av looping, går du på fel väg. Du måste tänka i termer av set-baserad logik. Vad du behöver göra är att bli av med variabeln @weeknumber helt och hållet och bara gruppera dina data på ett annat sätt. Du vill gruppera efter veckor, så du måste räkna ut veckonummer. Du kan göra detta genom att använda DATEDIFF() och 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


  1. Släpp tabell om den finns

  2. Skillnad mellan MySQL-terminologi och främmande nycklar?

  3. Hur uppstår databaskorruption?

  4. medan på IDataReader.Read fungerar inte med avkastning men foreach på läsaren gör det