【问题标题】:Ungrouping dates values in a table in T-SQL在 T-SQL 中取消组合表中的日期值
【发布时间】:2021-06-13 07:18:08
【问题描述】:

我有下表 - tbl1:

      ClientID  DateIn      DateOut  
      2293      04/06/2018  04/10/2018
      2295      08/05/2019  08/07/2019

我需要以下结果

       ClientID  Date
       2293      04/06/2018
       2293      04/07/2018
       2293      04/08/2018
       2293      04/09/2018
       2293      04/10/2018

       2295      08/05/2019
       2295      08/06/2019
       2295      08/07/2019

因此,新的 [Date] 字段将代替 DateIn - DateOut 字段将上述日期“扩展”为单个值,与 ClientID 关联。

我对这里的方法有点困惑。请帮忙。

【问题讨论】:

    标签: sql-server tsql common-table-expression


    【解决方案1】:

    你可以尝试使用CTE递归

    ;WITH CTE AS (
        SELECT ClientID ,DateIn ,DateOut  
        FROM T 
        UNION ALL
        SELECT ClientID,
               DATEADD(DAY,1,DateIn),
               DateOut
        FROM CTE 
        WHERE DATEADD(DAY,1,DateIn) <= DateOut
    )
    SELECT ClientID,DateIn as 'Date'
    FROM CTE 
    ORDER BY ClientID,DateIn
    

    dbfiddle

    【讨论】:

    • 完美运行!我以前曾经问过类似的问题,但方法更复杂。我会尽量记住这一点,以备将来使用
    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 2021-03-19
    • 1970-01-01
    • 2017-07-12
    • 2015-05-19
    • 1970-01-01
    • 2010-10-11
    • 2011-01-20
    相关资源
    最近更新 更多