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

SQL数据转换:如何基于Type列创建新列并合并重复行?

行转列并合并Day+Region分组记录的解决方案

你的问题核心是单独使用CASE WHEN时没有对同组记录做聚合,导致每个分组内只有对应Type的行有值,其他行都是NULL。只要把CASE WHEN和聚合函数结合,再按Day、Region分组,就能消除空值并合并记录。

核心SQL写法

SELECT
    Day,
    Region,
    SUM(CASE WHEN Type = 'States' THEN Amount END) AS States,
    SUM(CASE WHEN Type = 'Cities' THEN Amount END) AS Cities,
    SUM(CASE WHEN Type = 'Regions' THEN Amount END) AS Regions
FROM
    your_table_name
GROUP BY
    Day,
    Region;

写法解释

  1. 聚合函数(SUM/MAX):因为每个Day+Region+Type组合只有一条记录,用SUM或MAX都能提取到对应Type的Amount值,同时自动忽略其他Type对应的NULL值,避免结果中出现空值(除非该分组下某Type完全没有记录,这时候会返回NULL,可按需处理)。
  2. GROUP BY子句:按Day和Region分组,确保每个唯一的Day+Region组合只生成一行结果。

处理空值(可选)

如果希望把无对应Type记录的NULL替换为默认值(比如0),可以用COALESCE函数包裹聚合表达式:

SELECT
    Day,
    Region,
    COALESCE(SUM(CASE WHEN Type = 'States' THEN Amount END), 0) AS States,
    COALESCE(SUM(CASE WHEN Type = 'Cities' THEN Amount END), 0) AS Cities,
    COALESCE(SUM(CASE WHEN Type = 'Regions' THEN Amount END), 0) AS Regions
FROM
    your_table_name
GROUP BY
    Day,
    Region;

示例效果

假设原始数据:

DayRegionTypeAmount
2024-01-01NorthStates100
2024-01-01NorthCities200
2024-01-01NorthRegions300
2024-01-02SouthStates150

执行第一个SQL后得到:

DayRegionStatesCitiesRegions
2024-01-01North100200300
2024-01-02South150NULLNULL

执行带COALESCE的SQL后得到:

DayRegionStatesCitiesRegions
2024-01-01North100200300
2024-01-02South15000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:07:23