我需要创建一个类似于以下内容的报告(“WE”是周末从周日到周六):
SEPT.
WE 9/10 WE 9/17 WE 9/24 WE 10/1
Metric#1 40 49 58 40
Metric#2 24 25 20 1
以上可能不正确,这只是格式的一个例子。
我的问题是我不知道哪个星期对应哪几个月。例如,10月30日至11月5日那周,我不知道它属于哪个月。
他们给了我如何做到这一点的灵活性。只要它是一致的,它应该没问题。
我还可以使用那周的星期日(10月30日 - 11月5日是10月的一周,因为10月30日是星期天)。
可以在此处使用一些帮助来确定如何为特定月份分配一周。我可以进行旋转,这是我不确定的日期逻辑。该报告是过去3个月。
SQL Server 2008.报告将在SSRS 2008 R2
中编辑:刚刚收到客户的要求。那个星期中天数最多的月份。例如8月28日至9月3日,那个星期8月有4天,9月有3天,因此那个星期属于8月。我会看看能不能解决这个问题。
答案 0 :(得分:2)
基本上,您构建一个天数表(10年的天数仅为3652行),并将每个日期与您要分配的日期相关联。
答案 1 :(得分:2)
您的额外要求意味着一周中的月份将始终是一周的星期三(因为您有周日周六。)
所以这样的事情可以让你获得任何日期的月份:
DECLARE @TestDate DATETIME
SET @TestDate = 'October 31, 2011'
SELECT
DATEADD(week, DATEDIFF(week, 0, @TestDate), 2) AS WednesdayOfWeek, -- This is Wednesday of the week.
DATEPART(MONTH, DATEADD(week, DATEDIFF(week, 0, @TestDate), 2)) AS MonthNum,
DATENAME(MONTH, DATEADD(week, DATEDIFF(week, 0, @TestDate), 2)) AS MonthName,
DATEADD(MONTH, DATEDIFF(MONTH, 0, DATEADD(week, DATEDIFF(week, 0, @TestDate), 2)), 0) AS FirstOfMonth
答案 2 :(得分:2)
您可以使用星期三的日期来确定相应星期所属的月份。您的查询可能如下所示:
WITH marked AS (
SELECT
*,
WednesdayDate = DATEADD(DAY, 4 - DATEPART(WEEKDAY, DateColumn), DateColumn)
FROM atable
),
grouped AS (
SELECT
WeekYear = YEAR(WednesdayDate),
WeekMonth = MONTH(WednesdayDate),
WeekEnding = DATEADD(DAY, 3, WednesdayDate),
Metric1 = AGG(...),
Metric2 = AGG(...),
...
FROM marked
GROUP BY WednesdayDate
)
SELECT *
FROM grouped
WHERE WeekYear = ...
AND WeekMonth = ...
您的下一步可能是dynamic pivoting。