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

如何用Pivot实现行转列?Teradata pivot语句结果不符排查

问题分析与修正方案

你的原SQL语句存在语法和逻辑问题,导致无法得到预期结果,具体问题及修正方案如下:

原语句的问题点

  • 聚合函数选择错误:你用了max(client),但client是需要分组的维度,应该聚合发票采购编码这类你想转置展示的字段
  • PIVOT语法错误:IN子句未给转置后的列指定别名,多余了TEST关键字,且缺少闭合括号
  • ORDER BY位置错误:应该放在整个查询的末尾,而非PIVOT子句内

修正后的Teradata PIVOT语句

假设你的tableA表结构包含client(客户标识)、invoice_type(发票类型,值为'18'/'100')、invoice_code(发票采购编码),以下是正确语句:

SELECT *
FROM tableA
PIVOT (
  -- 根据需求选聚合函数:取单条编码用MAX/MIN,合并多条用LISTAGG
  MAX(invoice_code)
  FOR invoice_type IN (
    '18' AS invoice_type_18,
    '100' AS invoice_type_100
  )
) AS pivoted_result
ORDER BY client;

补充说明

如果同一客户同一种发票类型有多条记录:

  • 只需保留一条编码:用MAX(invoice_code)或MIN(invoice_code)(根据编码排序逻辑选择)
  • 合并所有编码为字符串:替换聚合函数为
    LISTAGG(invoice_code, ',') WITHIN GROUP (ORDER BY invoice_code)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:32:22