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感谢您的编辑。通过手机提问