cwui 2024-06-17 15:04 采纳率: 27.8%
浏览 29
已结题

逐月累计,月份不连续,补齐月份

原始表 , 没有02月

img

逐月累计 amount ,累计值也缺少02月

img

如果想补齐02月,达到下面的效果,除了 union 另外一个表的 0 , 还有什么办法

img

  • 写回答

25条回答 默认 最新

  • 专家-皆知 2024-06-17 15:04
    关注
    获得0.15元问题酬金

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    为了解决这个问题,可以使用窗口函数与生成日期序列的方法相结合。首先,生成一个包含所有可能月份的日期序列表,然后将原始数据与这个日期序列进行左连接,再使用窗口函数计算累计金额。以下是详细的步骤和SQL代码:

    1. 创建一个包含所有可能月份的日期序列表。这里假设我们关注的年份范围是2024年。

    2. 左连接原始数据到日期序列表,确保即使某个月份没有数据,也能在结果中显示出来,并且金额为0。

    3. 使用窗口函数计算逐月累计金额

    具体SQL代码如下:

    -- 假设原始数据表为 original_data
    WITH date_sequence AS (
        SELECT 
            2024 AS YEAR,
            n + 1 AS MON
        FROM 
            generate_series(0, 11) n -- 生成从0到11的序列,代表每个月份
    ),
    data_with_dates AS (
        SELECT 
            ds.YEAR,
            ds.MON,
            COALESCE(od.AMOUNT, 0) AS AMOUNT
        FROM 
            date_sequence ds
        LEFT JOIN 
            original_data od ON ds.YEAR = od.YEAR AND ds.MON = od.MON
    )
    SELECT 
        YEAR,
        MON,
        AMOUNT,
        SUM(AMOUNT) OVER (PARTITION BY YEAR ORDER BY MON) AS AMOUNT_SUM
    FROM 
        data_with_dates;
    

    这段代码首先创建了一个date_sequence CTE,其中包含了2024年的所有月份。然后,通过LEFT JOIN将原始数据表original_datadate_sequence连接起来,对于原始数据中缺失的月份,AMOUNT字段将被填充为0。最后,使用窗口函数SUM(AMOUNT) OVER (PARTITION BY YEAR ORDER BY MON)计算每个月份的累计金额。

    这样处理后,即使原始数据中有缺失的月份,最终的结果也会包括这些月份,并且累计金额会正确地反映出来。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 创建了问题 6月17日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响