使用SQL Server 2008每月获得数周

时间:2018-08-14 16:14:18

标签: sql-server-2008

今年八月包含第31、32、33和34周。

如何进行查询以获取每月(8)中每个星期的所有回报?

示例:

select sum(a) as MyTot
from MyTable
where week numbers are included in month

像泥一样清晰吗?

我可以获得每个星期的收益,因为其中有一个包含星期数的字段。我需要汇总任何给定月份中的所有星期。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以创建一个日历表,其中包含有关日期的各种数据-工作日,星期几,一年中的某日,每月的某天,月份的名称,月份的数字等。然后,您可以将当前表与日历表连接起来,并按相关月份进行过滤。
实际上,正如亚伦·伯特兰德(Aaron Bertrand)在他的Creating a date dimension or calendar table in SQL Server文章中指出的那样,这可能是一件非常有用的事情。

另一种选择是计算该月的第一个和最后一个日期,获取这些日期的星期数,然后使用它从表中选择数据:

DECLARE @StartDate date = DATEADD(Month, DATEDIFF(Month, 0, GetDate()), 0)
DECLARE @EndDate date = DATEADD(Day, -1, DATEADD(Month, 1, @StartDate))

SELECT SUM(a) as MyTot
FROM MyTable
WHERE weekNumber >= DATEPART(WEEK, @StartDate)
AND  weekNumber <= DATEPART(WEEK, @EndDate)

但是请注意,DATEPART(WEEK, @Date)返回值取决于SET DATEFIRST设置的值。您可能还想看看ISO_WEEK

相关问题