如何用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
相关产品推荐
相关产品推荐

