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

Oracle多列分组并合并指定国家行的实现方法

Oracle合并指定国家分组求和解决方案

首先看你的需求:把FRA、ITA合并为EUR,按月份和处理后的国家分组计算总金额。这里用CASE表达式配合分组聚合就能轻松实现。

先确认你的原始数据表:

COUNTRY | AMOUNT | MONTH
USA     | 100    | 1
USA     | 100    | 1
USA     | 100    | 2
FRA     | 100    | 1
ITA     | 100    | 1
ITA     | 100    | 2
FRA     | 100    | 2

期望得到的结果:

COUNTRY | AMOUNT | MONTH
USA     | 200    | 1
EUR     | 200    | 1
USA     | 100    | 2
EUR     | 200    | 2

实现代码

下面是兼容所有Oracle版本的写法:

SELECT
    CASE
        WHEN COUNTRY IN ('FRA', 'ITA') THEN 'EUR'
        ELSE COUNTRY
    END AS COUNTRY,
    SUM(AMOUNT) AS AMOUNT,
    MONTH
FROM your_table_name -- 替换成你实际的表名
GROUP BY
    CASE
        WHEN COUNTRY IN ('FRA', 'ITA') THEN 'EUR'
        ELSE COUNTRY
    END,
    MONTH
ORDER BY MONTH, COUNTRY;

代码解释

  • CASE表达式:核心逻辑,判断国家是否是FRA或ITA,是的话替换成EUR,其他国家保持原名;
  • SUM(AMOUNT):对每个分组内的金额求和,得到每个国家/EUR在对应月份的总金额;
  • GROUP BY:必须和SELECT里的分类逻辑完全一致,这样才能把FRA和ITA的记录归到同一个EUR分组里;
  • ORDER BY:让结果按月份升序,再按国家排序,和你期望的输出顺序匹配。

如果你的Oracle版本是12c及以上,还可以简化GROUP BY部分(支持使用SELECT中的别名):

SELECT
    CASE
        WHEN COUNTRY IN ('FRA', 'ITA') THEN 'EUR'
        ELSE COUNTRY
    END AS COUNTRY,
    SUM(AMOUNT) AS AMOUNT,
    MONTH
FROM your_table_name
GROUP BY COUNTRY, MONTH -- 这里的COUNTRY是SELECT里的别名,12c+支持
ORDER BY MONTH, COUNTRY;

这个方案非常灵活,以后如果需要调整合并的国家列表,只需要修改IN ('FRA', 'ITA')里的内容就可以了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:16:01