Sql server T-SQL创建标签“第1周:2018年1月1日-2018年7月1日”
有没有办法创建一个包含以下内容的表Sql server T-SQL创建标签“第1周:2018年1月1日-2018年7月1日”,sql-server,tsql,date,range,label,Sql Server,Tsql,Date,Range,Label,有没有办法创建一个包含以下内容的表 Label “week #1: 1/1/18 - 1/7/18” “week #2: 1/8/18 - 1/15/18” 等等 基本上,我在寻找周数和该周包含的日期范围 我认为您希望从日期维度或日历表开始。在许多创建它们的例子中,创建它们并不是真正的问题,更重要的是如何使用它们 在您的示例中,看起来您希望以数据为轴心创建交叉表。根据经验,与将非规范化的反模式持久化到关系数据库中相比,通常以客户机应用程序为中心更好 下面是一个虚构的例子: DECLARE
Label
“week #1: 1/1/18 - 1/7/18”
“week #2: 1/8/18 - 1/15/18”
等等
基本上,我在寻找周数和该周包含的日期范围 我认为您希望从日期维度或日历表开始。在许多创建它们的例子中,创建它们并不是真正的问题,更重要的是如何使用它们 在您的示例中,看起来您希望以数据为轴心创建交叉表。根据经验,与将非规范化的反模式持久化到关系数据库中相比,通常以客户机应用程序为中心更好 下面是一个虚构的例子:
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中的透视表和切块切块。同样,您可能不希望将数据作为交叉表存储在数据库中。@marc\u感谢您的编辑。通过手机提问