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

如何在Teradata中不使用聚合函数实现长表转宽表

Teradata 无需实际聚合实现长表转宽表的方案

可以实现,核心思路是先给同一Initial分组下的每个Name分配唯一的行号,再通过伪聚合(仅满足语法要求,无实际聚合计算)完成旋转:

  • 同一分组+行号的组合下只会有1个唯一的Name值,使用MAX/MIN聚合时只会返回原值,不会对原始数据做任何合并、计算操作。

方案1:ROW_NUMBER + CASE WHEN(最直观,无需用到PIVOT语法)

SELECT
  Initial,
  MAX(CASE WHEN rn = 1 THEN "Name" END) AS Name1,
  MAX(CASE WHEN rn = 2 THEN "Name" END) AS Name2,
  MAX(CASE WHEN rn = 3 THEN "Name" END) AS Name3,
  MAX(CASE WHEN rn = 4 THEN "Name" END) AS Name4
FROM (
  SELECT 
    Initial,
    "Name",
    -- 同Initial下按Name排序分配唯一行号
    ROW_NUMBER() OVER(PARTITION BY Initial ORDER BY "Name") AS rn
  FROM MyTab
) t
GROUP BY Initial
ORDER BY Initial;

方案2:ROW_NUMBER + PIVOT(满足PIVOT语法要求,无实际聚合)

SELECT *
FROM (
  SELECT 
    Initial,
    "Name",
    -- 生成旋转后的列名
    'Name' || TRIM(ROW_NUMBER() OVER(PARTITION BY Initial ORDER BY "Name")) AS col_name
  FROM MyTab
) t
PIVOT(
  MAX("Name") -- 此处MAX仅满足语法要求,每个col_name对应唯一值,无聚合计算
  FOR col_name IN ('Name1' AS Name1, 'Name2' AS Name2, 'Name3' AS Name3, 'Name4' AS Name4)
) p
ORDER BY Initial;

两种方案执行后返回的结果完全符合要求的宽表结构。如果分组下的最大行数不固定,需要动态生成列,可以拼接动态SQL执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:06:02