Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL chạy Biến +1 cho đến khi Biến đạt 52?

Nếu bạn đang suy nghĩ theo kiểu lặp lại, bạn đang đi sai đường. Bạn cần phải suy nghĩ về logic dựa trên tập hợp. Những gì bạn cần làm là loại bỏ hoàn toàn biến @weeknumber và chỉ nhóm dữ liệu của bạn theo cách khác. Bạn muốn nhóm theo tuần, vì vậy bạn cần tính số tuần. Bạn có thể thực hiện việc này bằng cách sử dụng DATEDIFF () và 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. Máy chủ SQL. Bí danh không hoạt động

  2. Microsoft có thể lưu trữ các trường có ba giá trị trong một bit không?

  3. Truy vấn hết thời gian chờ khi được thực thi từ web, nhưng cực nhanh khi được thực thi từ SSMS

  4. Làm cách nào để lưu dữ liệu từ xml sang sql 2008?

  5. TSQL PIVOT NHIỀU CỘT