【问题标题】:How to Add one row to another如何将一行添加到另一行
【发布时间】:2020-09-30 09:30:04
【问题描述】:

我有一组如图所示的数据:

我尝试使用下图中再次正确显示的前导函数添加一月到二月:

我认为它会像 for 循环一样添加并添加到下一行,但事实并非如此。

我正在寻求有关如何像 for 循环一样一次又一次地添加数据的帮助。我已经粘贴了我在下面使用的代码。

;WITH MonthActiveUsers AS (

        SELECT MonthLogin, COUNT(MonthLogin) AS ActiveUsers
        FROM #TEMPDistinctActiveUsersPerMonth DAUPM
        GROUP BY MonthLogin     
)  
SELECT MAU.MonthLogin, (LEAD(MAU.ActiveUsers,0) OVER (ORDER BY MAU.MonthLogin ASC) + LEAD(MAU.ActiveUsers,1) OVER (ORDER BY MAU.MonthLogin ASC)) AS [Count of Active Users]
FROM 
    (   SELECT CASE 
                    WHEN MonthLogin = 'January'
                    THEN '2020-01-01'
                    WHEN MonthLogin = 'February'
                    THEN '2020-02-01'
                    WHEN MonthLogin = 'March'
                    THEN '2020-03-01'
                    WHEN MonthLogin = 'April'
                    THEN '2020-04-01'
                    WHEN MonthLogin = 'May'
                    THEN '2020-05-01'
                    WHEN MonthLogin = 'June'
                    THEN '2020-06-01'
                    ELSE NULL
                END AS [MonthLogin]
                ,ActiveUsers
        FROM MonthActiveUsers MAU
        ) MAU

期望的结果是:

January = 3313
February = 3349
March = 3398
April = 3421
May = 3437
June = 3444

【问题讨论】:

    标签: sql sql-server date count window-functions


    【解决方案1】:

    我认为你想要一个窗口总和:

    WITH ...
    SELECT 
        MAU.MonthLogin, 
        SUM(MAU.ActiveUsers) OVER (ORDER BY MAU.MonthLogin) [Count of Active Users]
    FROM ...
    

    注意,查询可以通过使用CASE的短路形式,以及混合聚合和窗口函数来简化一点:

    SELECT 
        MonthLogin,
        COUNT(*) ActiveUsers,
        SUM(COUNT(*)) OVER(ORDER BY MonthLogin) [Count of Active Users]
    FROM (
        SELECT 
            CASE MonthLogin
                WHEN'January'   THEN '2020-01-01'
                WHEN'February'  THEN '2020-02-01'
                WHEN'March'     THEN '2020-03-01'
                WHEN'April'     THEN '2020-04-01'
                WHEN'May'       THEN '2020-05-01'
                WHEN'June'      THEN '2020-06-01'
            END AS MonthLogin
        FROM #TEMPDistinctActiveUsersPerMonth
    ) t
    GROUP BY MonthLogin
    ORDER BY MonthLogin
    

    【讨论】:

      猜你喜欢
      • 2020-05-09
      • 2016-09-19
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      相关资源
      最近更新 更多