Sql 如何为非工作日期聚合数据?

Sql 如何为非工作日期聚合数据?,sql,sql-server,Sql,Sql Server,我有两张桌子。表1包含工作日期,表2包含日历日期的数值。 我需要连接这些表并输出表2中的值和表1的日期 棘手的是,在非工作日期间,该值应累计并添加到下一个工作日的值中 下面是创建此场景的示例数据的简单脚本 创建表1 [日期]日期主键 在表1中插入值 '2021-02-12', '2021-02-15', '2021-02-16', '2021-02-17', '2021-02-18', '2021-02-19', '2021-02-22', '2021-02-23', '2021-02-24'

我有两张桌子。表1包含工作日期,表2包含日历日期的数值。 我需要连接这些表并输出表2中的值和表1的日期

棘手的是,在非工作日期间,该值应累计并添加到下一个工作日的值中

下面是创建此场景的示例数据的简单脚本

创建表1 [日期]日期主键 在表1中插入值 '2021-02-12', '2021-02-15', '2021-02-16', '2021-02-17', '2021-02-18', '2021-02-19', '2021-02-22', '2021-02-23', '2021-02-24' 创建表2 [日期]日期主键, [Value]INT不为空 在表2中插入值 '2021-02-12', 1, '2021-02-13', 1, '2021-02-14', 2, '2021-02-15', 3, '2021-02-16', 5, '2021-02-17', 8, '2021-02-18', 13, '2021-02-19', 21, '2021-02-20', 34, '2021-02-21', 55, '2021-02-22', 89, '2021-02-23', 144, '2021-02-24', 233 去 这就是输出的样子:

 ---------------------
 | Date       |Value |
 | ------------------|
 | 2021-02-12 | 1    |
 | 2021-02-15 | 6    |
 | 2021-02-16 | 5    |
 | 2021-02-17 | 8    |
 | 2021-02-18 | 13   |
 | 2021-02-19 | 21   |
 | 2021-02-22 | 178  |
 | 2021-02-23 | 144  |
 | 2021-02-24 | 233  |
 ---------------------
我尝试了以下几点:

以x为 选择 按[Date]作为RowID的订单上的行号 ,[日期] 来自表1 选择 t1.[日期] , 选择总和[值] 来自表2 其中,[Date]>ISNULLt1p.[Date]、'0000101'和[Date]您可以尝试在您的条件下使用求和窗口函数来创建组编号,然后聚合非工作日期的数据

;WITH CTE AS (
    SELECT t2.[Date],
           t2.[Value],
          SUM(CASE WHEN t1.[Date] IS NOT NULL Then 1 END) OVER(ORDER BY t2.[Date] DESC) grp
    FROM #table2 t2 
    LEFT JOIN #table1 t1
    ON t1.[Date] = t2.[Date]
)
SELECT MAX([Date]) as 'Date',
       SUM([Value]) as 'Value'
FROM CTE 
GROUP BY grp
ORDER BY [Date]