22,298
社区成员
发帖
与我相关
我的任务
分享DECLARE @Date datetime
DECLARE @StartDate datetime
DECLARE @EndDate datetime
DECLARE @WeekDay int
DECLARE @i int
SET DATEFIRST 7 --设置每周的第一天
SET @StartDate='2010-01-01' --统计的开始日期
SET @EndDate='2010-12-31' --统计的结束日期
SET @WeekDay=1 --根据实际的@@DATEFIRST而定
SET @i=DATEPART(weekday,@StartDate)
IF(@i<=@WeekDay AND @i<7)
SET @i=@WeekDay-@i
ELSE IF(@i<=@WeekDay AND @i=7)
SET @i=@i-@WeekDay
ELSE
SET @i=@@DATEFIRST-@i+@WeekDay
SET @Date=DATEADD(day,@i,@StartDate)
WHILE @Date<=@EndDate
BEGIN
IF(@StartDate<=@Date) PRINT CONVERT(nvarchar(10),@Date,121)
SET @Date=DATEADD(Week,1,@Date)
END
GO
/*
2010-01-03
2010-01-10
2010-01-17
2010-01-24
2010-01-31
2010-02-07
2010-02-14
2010-02-21
2010-02-28
2010-03-07
2010-03-14
2010-03-21
2010-03-28
2010-04-04
2010-04-11
2010-04-18
2010-04-25
2010-05-02
2010-05-09
2010-05-16
2010-05-23
2010-05-30
2010-06-06
2010-06-13
2010-06-20
2010-06-27
2010-07-04
2010-07-11
2010-07-18
2010-07-25
2010-08-01
2010-08-08
2010-08-15
2010-08-22
2010-08-29
2010-09-05
2010-09-12
2010-09-19
2010-09-26
2010-10-03
2010-10-10
2010-10-17
2010-10-24
2010-10-31
2010-11-07
2010-11-14
2010-11-21
2010-11-28
2010-12-05
2010-12-12
2010-12-19
2010-12-26
*/--假设dt为时间字段,val为数量字段
select nian,
sum(case zhou when 1 then val else 0 end) [1],
sum(case zhou when 2 then val else 0 end) [2],
sum(case zhou when 3 then val else 0 end) [3],
...
sum(case zhou when 52 then val else 0 end) [52]
from
(
select year(dt) nian, datepart(wk,dt) zhou,val from tb
) t
group by nian