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

CALCS表重复code(仅两次)的total列特殊计算需求

CALCS表的Total列计算与记录合并需求

表结构

  • code:记录标识符(非唯一)
  • value1、value2、value3、value4:需参与求和的数值字段
  • price:作业成本字段

需求说明

  1. 所有记录需计算total列,常规计算逻辑为:total = price + value1 + value2 + value3 + value4
  2. 当同一code仅出现两次时,需将另一行的value1值加入该行的total计算,最终仅保留该code的一行记录(示例中保留第一行的其他字段值)

示例原数据

code    value1  value2  value3  value4  price
001579  93,1    0       0      0       280
001585  83,13   0       0      0       250
001592  250     0       0      0       500
001592  50      0       0      0       500
001593  84      0       0      33      240

期望结果

code    value1  value2  value3  value4  price    total
001579  93,1    0       0      0       280       373,1
001585  83,13   0       0      0       250       333,13
001592  250     0       0      0       500       800 (第一行数值+第二行的value1)
001593  84      0       0      33      240       357

解决方案(Oracle SQL)

以下SQL通过窗口函数实现需求:

WITH code_stats AS (
    SELECT 
        *,
        COUNT(*) OVER (PARTITION BY code) AS code_count,
        SUM(value1) OVER (PARTITION BY code) AS sum_value1,
        ROW_NUMBER() OVER (PARTITION BY code ORDER BY code) AS row_num
    FROM CALCS
)
SELECT
    code,
    value1,
    value2,
    value3,
    value4,
    price,
    CASE
        WHEN code_count = 2 THEN price + sum_value1 + value2 + value3 + value4
        ELSE price + value1 + value2 + value3 + value4
    END AS total
FROM code_stats
WHERE code_count != 2 OR row_num = 1
ORDER BY code;

逻辑说明

  • 用code_stats公共表表达式一次性统计每个code的出现次数、所有value1的总和,以及每个code下的行号
  • 通过CASE分支处理两种计算逻辑:出现2次的code用sum_value1替代单条的value1计算total,其他情况按常规逻辑计算
  • 最后过滤掉出现2次的code的多余行,只保留第一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:10:35