【发布时间】:2012-03-16 17:10:35
【问题描述】:
我不知道如何循环以使查询显示自报告日期起的所有周数?
代码确定周一 - 周日周,然后应将值插入临时表中,然后查询周。我对 report_date 进行了硬编码,它应该显示多条记录。
任何想法
DECLARE @REPORT_DATE DATETIME, @WEEK_BEGINING VARCHAR(10)
SELECT @REPORT_DATE = '2011-01-01T00:00:00'
--SELECT @REPORT_DATE = GETDATE() -- should grab the date now.
SELECT @WEEK_BEGINING = 'MONDAY'
IF @WEEK_BEGINING = 'MONDAY'
SET DATEFIRST 1
ELSE IF @WEEK_BEGINING = 'TUESDAY'
SET DATEFIRST 2
ELSE IF @WEEK_BEGINING = 'WEDNESDAY'
SET DATEFIRST 3
ELSE IF @WEEK_BEGINING = 'THURSDAY'
SET DATEFIRST 4
ELSE IF @WEEK_BEGINING = 'FRIDAY'
SET DATEFIRST 5
ELSE IF @WEEK_BEGINING = 'SATURDAY'
SET DATEFIRST 6
ELSE IF @WEEK_BEGINING = 'SUNDAY'
SET DATEFIRST 7
DECLARE @WEEK_START_DATE DATETIME, @WEEK_END_DATE DATETIME
--GET THE WEEK START DATE
SELECT @WEEK_START_DATE = @REPORT_DATE - (DATEPART(DW, @REPORT_DATE) - 1)
--GET THE WEEK END DATE
SELECT @WEEK_END_DATE = @REPORT_DATE + (7 - DATEPART(DW, @REPORT_DATE))
PRINT 'Week Start: ' + CONVERT(VARCHAR, @WEEK_START_DATE)
PRINT 'Week End: ' + CONVERT(VARCHAR, @WEEK_END_DATE)
CREATE TABLE #WeekList
(
month_date date
)
DECLARE @Interval int = 1
INSERT INTO #WeekList SELECT @WEEK_START_DATE
WHILE @Interval < 1
BEGIN
INSERT INTO #WeekList SELECT DATEADD(MONTH, - @Interval, @WEEK_START_DATE)
SET @Interval = @Interval + 1
END
SELECT
--Create the month ID code:
@WEEK_START_DATE AS Start_Week, @WEEK_END_DATE AS End_Week
FROM #WeekList
ORDER BY Start_Week DESC
DROP TABLE #WeekList
【问题讨论】:
-
能否提供一些示例数据和预期输出?
标签: sql sql-server sql-server-2008 tsql reporting