【问题标题】:SQL - create multiple calendars in one tableSQL - 在一张表中创建多个日历
【发布时间】:2018-02-24 09:43:32
【问题描述】:

我正在尝试创建一个表格,该表格根据某一行的开始和结束日期计算多个日历。我有一个看起来像这样的表:

关键开始日期结束日期

123.1 1-10-2009 24-12-2009

123.2 1-7-2010 9-2-2011

123.3 1-5-2011 30-10-2011

…………

对于每个键,我想要一个新行,开始日期 +1 个月直到结束日期。

目前我的查询仅在我的临时表包含一行时才有效,即:

DECLARE @StartDate DATE = (select Start_date from #dim2);

SET DATEFIRST 7;
SET DATEFORMAT ymd;
SET LANGUAGE US_ENGLISH;

DECLARE @CutoffDate DATE = (select End_date from #dim2);

CREATE TABLE #dim3
([verwachte_aflossing]      DATE,-- PRIMARY KEY,
 );

INSERT #dim3([verwachte_aflossing] )
SELECT d 
FROM
(
 SELECT d = DATEADD(month, rn-1, @StartDate) 
 FROM 
 (
   SELECT TOP (DATEDIFF(month, @StartDate, @CutoffDate)) 
     rn = ROW_NUMBER() OVER (ORDER BY s1.[object_id])
   FROM sys.all_objects AS s1
   CROSS JOIN sys.all_objects AS s2
   ORDER BY s1.[object_id]
 ) AS x
) AS y

现在有人怎么处理这个问题吗?

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    对于 SQL Server 递归 cte 是一种选择

    WITH CTE as
    (
        select [Key], start_date, end_date from table
        union all
        select [Key], dateadd(month,1,start_date) start_date, end_date 
        from cte
        where datediff(month, start_date, end_date) > 0
    )
    
    SELECT * FROM CTE
    OPTION (MAXRECURSION 0)
    

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 1970-01-01
      • 2013-10-16
      • 2011-08-03
      • 2021-10-03
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-18
      相关资源
      最近更新 更多