有没有办法用以下方法创建表?
Label
“week #1: 1/1/18 - 1/7/18”
“week #2: 1/8/18 - 1/15/18”
等等?
基本上,我正在寻找一周中包含的周数和日期范围。
答案 0 :(得分:0)
我认为你想要的是一个起点,是一个"日期维度"或"日历表"。 Here's one创建它们的许多示例(创建它们并不是真正的问题,它是如何使用它们更重要的)。
在您的示例中,您似乎想要转动数据(创建交叉表)。根据经验,通常在客户端应用程序上进行转换比在关系数据库中持久化非规范化反模式更好。
这是一个虚构的例子:
DECLARE @start_date as datetime = '20180301';
DECLARE @end_date as datetime = dateadd(dd,datediff(dd,0,GETDATE()),0);--midnight last night
SELECT cal.week_starting --The date of the start of the week eg 15 April 2018.
,dateadd(d,6,cal.week_starting) as week_ending -- The date of the last day of the week eg 21 April 2018. You can cast as varchar, format and concatenate to the previous field to suit yourself.
,my_events.my_category
,count(*) as recs
FROM my.CALENDAR cal
JOIN dbo.big_list_of_events my_events ON cal.census_dttm = my_events.event_date
WHERE my_events.event_date >= @start_date
and my_events.event_date < @end_date
GROUP BY cal.week_starting
,my_events.my_category
ORDER BY cal.week_starting
,my_events.my_category
;
一旦达到这一点,您就可以使用客户端应用程序(例如Excel中的数据透视表)进行查询,并根据您的内容进行切片和切块。同样,您可能不希望将数据库中存储的数据作为交叉表。