Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL изпълнява променлива +1, докато променливата достигне 52?

Ако мислите от гледна точка на зацикляне, вървите по грешен път. Трябва да мислите от гледна точка на логиката, базирана на множество. Това, което трябва да направите, е да се отървете изцяло от променливата @weeknumber и просто да групирате данните си по различен начин. Искате да групирате по седмици, така че трябва да изчислите номера на седмицата. Можете да направите това, като използвате DATEDIFF() и 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MS SQL сравняване на дати?

  2. Съберете данните за уикенда различно от делничните дни

  3. Извикване на съхранена процедура с помощта на VBA

  4. Android достъп до отдалечена SQL база данни

  5. Репликацията на Sql сървър изисква действителното име на сървъра, за да се осъществи връзка със сървъра