【问题标题】:Running Total in SQL including last year end total在 SQL 中运行总计,包括去年年底总计
【发布时间】:2019-11-06 02:31:24
【问题描述】:

需要查询以选择图片中提到的“运行总计”
2017 年末总计加上每个月的新数字应与之前的总计相加。

https://i.stack.imgur.com/DL7p0.png“示例”

【问题讨论】:

  • 这与仅累积总和有何不同?
  • 需要一个 ID 或月份为 1-12 才能在 SQL 中正常工作,因为不能保证顺序。或者像@mkRabbani 所做的那样,将年份和月份转换为实际日期。

标签: sql sql-server reporting-services


【解决方案1】:

以下脚本适用于 MSSQL,您也可以对其他数据库使用相同的逻辑-

WITH your_table(year,month,partersgrowth)
AS
(
    SELECT '2019','jan', 100 UNION ALL
    SELECT '2019','feb', 300 UNION ALL
    SELECT '2019','mar', 400 UNION ALL
    SELECT '2019','apr', 500 UNION ALL
    SELECT '2018','Dec', 200
)

SELECT A.year,A.month,A.partersgrowth,
(
    SELECT SUM(B.partersgrowth) 
    FROM your_table B 
    WHERE CAST(B.Year +'-'+B.month+'-01' AS DATE) 
        <= CAST(A.Year +'-'+A.month+'-01' AS DATE)
) Running_Total
FROM your_table A
ORDER BY CAST(A.Year +'-'+A.month+'-01' AS DATE)

【讨论】:

    【解决方案2】:

    使用@mkRabbani 解决方案.. 你可以像这样简化它:

    ;WITH your_table(year,month,partersgrowth)
    AS
    (
        SELECT '2019','jan', 100 UNION ALL
        SELECT '2019','feb', 300 UNION ALL
        SELECT '2019','mar', 400 UNION ALL
        SELECT '2019','apr', 500 UNION ALL
        SELECT '2018','Dec', 200
    )
    
    select *, sum(partersgrowth) over ( order by  [year],[month]) as running_total 
    from your_table
    

    编辑:正如下面的评论所指出的..您想在总和部分按适当的日期订购(我会使用按年份排序,然后使用月份编号而不是月份名称)

    【讨论】:

    • 我认为您想按年订购,然后按月订购,它还假设输出是按年月订购的。否则你会看到一些奇怪的结果:示例:rextester.com/PTBLA37148 因为它没有指定顺序,所以结果可能有点不稳定。
    • 您需要将两者都转换为日期以保持排序顺序正确,而不是年/月,否则按月的顺序将排序 alpha 而不是按日期。
    • @xQbert 同意.. 它仅基于以列形式可见的示例数据.. 我们只能希望 OP 能接受答案并使其适应自己的情况。 ..
    【解决方案3】:

    如果你使用 MSSQL 你可以运行下面的代码

    with cte as (
    select t.*, lag(partersGrowth) over(partition by year order by month asc rows ROWS UNBOUNDED PRECEDING) prevTotal
    from Table )
    select years, month, partersGrowth, prevTotal || '+' partersGrowth as "Need Running Total"
    from cte
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多