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

Oracle Database SQL列转行问题:PIVOT语法报错求助

Oracle PIVOT 查询报错排查与修正

原始数据表

ID (PrimaryKey)HumanAttributattributValue
1NameJohn
1CountryUSA

期望转换结果

ID (PrimaryKey)NameCountry
1JohnUSA

错误原因分析

你提供的SQL存在几个问题,导致Oracle抛出missing expression错误:

  • Oracle不支持用方括号[]包裹列名/别名,这是SQL Server的语法,Oracle中直接写列名即可,若列名含特殊字符才需要用双引号"";
  • SQL中多余的(*pink*)标记属于无效语法,必须移除;
  • 存在拼写错误:子查询别名SourceTabele应为SourceTable,PIVOT中的attributeValue和原表列名attributValue不一致(少了字母e)。

修正后的SQL

SELECT ID, Name, Country
FROM
(
    SELECT ID, HumanAttribut as Ahuman, attributValue
    FROM tableA
    WHERE ID = 1
    AND HumanAttribut IN ('Name', 'Country')
) as SourceTable
PIVOT
(
    Max(attributValue)
    FOR Ahuman IN (Name, Country)
) as PIVOT_TABLE;

同类案例说明

Oracle PIVOT的核心是将行数据转列为固定列,需注意:

  • 子查询需包含用于分组的列(这里是ID)、用于转列的标识列(Ahuman)、用于聚合的数值/文本列(attributValue);
  • FOR子句中直接列出要转成列的取值,无需特殊符号包裹;
  • 若转列的取值含特殊字符或大小写敏感,需用双引号包裹,例如FOR Ahuman IN ("Full Name", "Home Country")。

内容的提问来源于stack exchange,提问作者Bob der Bauer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:45:36