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

如何在Teradata中使用SQL转置表格至指定列结构?

在Teradata中实现行转列(Pivot)的解决方案

针对你需求的行转列场景,Teradata有两种常用的实现方式,分别适用于不同版本的环境,我给你详细说明:

方法1:使用Teradata原生PIVOT语法(推荐,适用于Teradata 16.0及以上版本)

Teradata从16.0版本开始支持标准的PIVOT操作,语法简洁易读,正好匹配你的需求:

SELECT *
FROM (
    SELECT column1, column2, column3, count
    FROM squema.table
) AS src
PIVOT (
    SUM(count)  -- 因为是聚合统计值,这里用SUM(如果count本身是单一行对应值,SUM和MAX/Min效果一致)
    FOR column3 IN (
        'tip1' AS tip1,
        'tip2' AS tip2,
        'tip3' AS tip3
    )
) AS pivoted_result;

代码说明:

  • 内层子查询src先筛选出需要的基础数据
  • PIVOT子句里,SUM(count)指定要聚合的目标列(PIVOT必须配合聚合函数使用)
  • FOR column3 IN (...)定义要转成列的原始字段值,同时指定转后的列别名

方法2:使用CASE WHEN + GROUP BY(兼容所有Teradata版本)

如果你的Teradata版本低于16.0,不支持PIVOT语法,可以用传统的CASE WHEN结合分组来实现,兼容性更好:

SELECT 
    column1,
    column2,
    SUM(CASE WHEN column3 = 'tip1' THEN count ELSE 0 END) AS tip1,
    SUM(CASE WHEN column3 = 'tip2' THEN count ELSE 0 END) AS tip2,
    SUM(CASE WHEN column3 = 'tip3' THEN count ELSE 0 END) AS tip3
FROM squema.table
GROUP BY column1, column2;

代码说明:

  • 每个CASE WHEN语句对应一个要转成的列,匹配column3的特定值时取对应的count,否则取0
  • 通过GROUP BY column1, column2把相同column1和column2的行合并,得到一行汇总结果

这两种方法执行后,都能得到你想要的目标表格:

column1column2tip1tip2tip3
ab1ab2123235

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:29:59