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

Redshift SQL行转列需求:将Source字段值转为列头

问题描述

源数据表temp的结构与数据如下:

SourcevalueID
AC123111
BV123111
AC456222
BV456222

需要将Source列的取值转换为新的列头,对应value列的值填入对应列,期望输出结构如下:

ABID
C123V123111
C456V456222

此前尝试使用LISTAGG函数,仅能得到带分隔符的单行数据,无法实现分列效果,尝试的SQL语句为:

SELECT
    id, 
    LISTAGG(DISTINCT value , '|') WITHIN GROUP (ORDER BY source) 
FROM
    temp 
GROUP BY
    id 
解决方案

方法1:条件聚合(通用兼容写法)

通过CASE语句结合聚合函数实现列转行,因为每个ID与Source的组合唯一,使用MAX或MIN均可:

SELECT
    id,
    MAX(CASE WHEN source = 'A' THEN value END) AS A,
    MAX(CASE WHEN source = 'B' THEN value END) AS B
FROM temp
GROUP BY id
ORDER BY id;

方法2:Redshift专属PIVOT语法

Redshift支持PIVOT操作,写法更简洁:

SELECT *
FROM temp
PIVOT (
    MAX(value)
    FOR source IN ('A' AS A, 'B' AS B)
) AS pivoted_table
ORDER BY id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:15:09