You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对字符串类型状态的Open工单计算累计求和?

解决方案:针对Open状态工单计算累计求和

原SQL的问题分析

你的代码存在两个关键错误:

  • 错误地给字段名ticket_status加了单引号,变成了字符串常量,'ticket_status' = 'open'永远不成立,导致SUM结果始终为0
  • 仅按open_date排序会导致同一天的工单顺序不确定,无法保证累计逻辑和预期一致

修正后的SQL(核心累计逻辑)

如果只需要得到累计数值,closed状态的行显示空值,可使用以下代码:

SELECT 
    id,
    open_date,
    ticket_status,
    ticket_closed,
    CASE 
        WHEN ticket_status = 'open' THEN 
            SUM(CASE WHEN ticket_status = 'open' THEN 1 ELSE 0 END) OVER (ORDER BY open_date, id ASC ROWS UNBOUNDED PRECEDING)
        ELSE 
            NULL 
    END AS cumulative_sum
FROM tb;

带计算说明的SQL(匹配你期望的输出格式)

如果需要像2(1+1)这样带计算过程的显示格式,可根据数据库语法调整拼接逻辑(以下示例兼容多数主流SQL数据库):

SELECT 
    id,
    open_date,
    ticket_status,
    ticket_closed,
    CASE 
        WHEN ticket_status = 'open' THEN 
            CONCAT(
                SUM(CASE WHEN ticket_status = 'open' THEN 1 ELSE 0 END) OVER (ORDER BY open_date, id ASC ROWS UNBOUNDED PRECEDING),
                '(',
                LTRIM(STRING_AGG(CASE WHEN ticket_status = 'open' THEN '1' ELSE '' END, '+' ORDER BY open_date, id), '+'),
                ')'
            )
        ELSE 
            NULL 
    END AS cumulative_sum
FROM tb;

注:STRING_AGG是PostgreSQL、SQL Server的函数,MySQL需替换为GROUP_CONCAT,请根据你的数据库类型调整。

结果说明

  • 按open_date + id排序,保证同一天的工单按id顺序累计
  • Open状态的行计算截至当前行的所有Open工单总数
  • Closed状态的行cumulative_sum显示空值,符合输出要求

内容的提问来源于stack exchange,提问作者OLIVE99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:35:20