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

如何在Amazon Redshift中合并通用标识对应的多行数据

在Amazon Redshift中合并同一通用标识的多行属性

这场景我太熟悉了!你要的其实是行转列(多行合并为单行,保留原属性列),而且要适配大量属性的情况,不用逐个写复杂逻辑对吧?

核心解决方案:用GROUP BY + 聚合函数忽略NULL

因为同一Common ID下每个属性列只有一个非空值,剩下的都是NULL,我们可以利用Redshift的聚合函数(比如MAX()或MIN())自动忽略NULL的特性,直接提取每个属性的有效值,同时按Common ID分组合并行。

示例SQL代码

假设你的表名为attribute_table,直接用下面的写法,不管有多少个属性列,只要复制对应格式就行:

SELECT
  "Common ID",
  MAX("Attribute 1") AS "Attribute 1",
  MAX("Attribute 2") AS "Attribute 2",
  -- 这里依次添加剩下的属性列,比如:
  MAX("Attribute 3") AS "Attribute 3",
  MAX("Attribute 4") AS "Attribute 4",
  -- ... 直到所有20个属性列都列出来
  MAX("Attribute 20") AS "Attribute 20"
FROM attribute_table
GROUP BY "Common ID"
ORDER BY "Common ID";

为什么这个方法好用?

  • 适配任意数量的属性:不管是2个还是20个属性,只要对每个属性列重复MAX(列名) AS 列名的格式就行,不用写复杂的CASE语句或者动态SQL。
  • 完美保留原列结构:和你要的输出格式完全一致,不会像LISTAGG那样把值拼接成单个列。
  • 高效且稳定:Redshift对GROUP BY和MAX/MIN的优化非常好,即使数据量较大也能快速执行,而且不管属性是字符串、数字还是日期类型,MAX/MIN都能正确提取非空值(同一ID下每个属性只有一个有效值,MAX和MIN结果一样)。

补充说明

如果你的属性列存在特殊情况(比如同一ID下某个属性有多个非空值),那可能需要先做去重处理,但根据你的描述“同一标识最多可能出现20次”且“每行仅填充一个属性”,这个方法完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:28:14