Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL uruchomić Zmienną +1, aż Zmienna osiągnie 52?

Jeśli myślisz w kategoriach pętli, idziesz złą ścieżką. Musisz myśleć w kategoriach logiki opartej na zbiorach. Musisz całkowicie pozbyć się zmiennej @weeknumber i po prostu inaczej pogrupować dane. Chcesz pogrupować według tygodni, więc musisz obliczyć numer tygodnia. Możesz to zrobić za pomocą funkcji DATEDIFF() i 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. SQL:Wybierz kolumny tylko z wartościami NULL

  2. Używanie merge..output do uzyskania mapowania między source.id i target.id

  3. Ciąg połączenia ADO.NET

  4. Jak zachować jedno wystąpienie połączenia SQL Server otwarte dla wielu żądań w C#?

  5. Jakie czynniki mogą spowodować ponowną kompilację procedur zapisanych w programie SQL Server?