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

SQL自定义聚合需求:合并指定Area数据并生成新表

自定义区域聚合的SQL实现方案

嘿,针对你需要将industry表中的区域进行合并聚合,最终生成新表industry2的需求,我整理了一套实用的SQL实现方案,咱们直接来看具体内容:

完整SQL代码

-- 先创建目标表industry2
CREATE TABLE industry2 (
    year char(4),
    qtr char(2),
    area char(6),
    industry char(3),
    ownership char(2),
    employment numeric(8,0)
);

-- 将聚合后的数据插入到industry2中
INSERT INTO industry2 (year, qtr, area, industry, ownership, employment)
SELECT
    year,
    qtr,
    -- 用CASE语句完成区域编码的重新归类
    CASE
        -- 把01到17的所有区域统一映射为00
        WHEN area BETWEEN '01' AND '17' THEN '00'
        -- 把20、21这两个区域合并为99
        WHEN area IN ('20', '21') THEN '99'
        -- 如果你有其他不需要合并的区域,取消下面注释就能保留原编码
        -- ELSE area
    END AS area,
    industry,
    ownership,
    -- 按分组字段对就业人数求和
    SUM(employment) AS employment
FROM dbo.industry
-- 可选:如果只想处理指定的两组区域,加上这个WHERE条件过滤
-- WHERE area BETWEEN '01' AND '17' OR area IN ('20', '21')
GROUP BY
    year,
    qtr,
    -- GROUP BY的逻辑要和SELECT里的区域映射完全一致
    CASE
        WHEN area BETWEEN '01' AND '17' THEN '00'
        WHEN area IN ('20', '21') THEN '99'
        -- ELSE area
    END,
    industry,
    ownership;

关键细节说明

  • 区域映射逻辑:用BETWEEN '01' AND '17'比逐个写OR要简洁高效得多,能一次性覆盖01到17的所有区域;20和21则用IN来匹配。
  • 分组一致性:GROUP BY子句里的区域判断必须和SELECT里的完全相同,这样才能保证同组的记录被正确合并求和。
  • 灵活调整空间:如果存在不需要合并的其他区域,取消ELSE area的注释就能保留原区域编码并单独聚合;如果只需要处理指定的两组区域,加上WHERE条件可以过滤掉无关数据,提升执行效率。

验证结果

用你提供的示例数据执行这段SQL后,会得到和你预期完全一致的结果:

2017 01 00 123000 1 660
2017 01 00 134000 1 26
2017 01 00 144000 1 14
2017 01 99 134000 1 15

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:48:50