Oracle SQL Developer中保留ID的表转置失败求助
Oracle SQL行转列(PIVOT)解决方案
问题原因分析
你的代码无法运行是因为几个Oracle语法细节错误:
- Oracle中表别名不能使用
AS关键字,列别名可以用,但表别名直接写在表名后即可; PIVOT的IN子句里,必须为每个转置后的列指定明确别名,否则生成的列名会是带单引号的字符串(如'nom'),不符合你要的结构;- 建议明确指定分组逻辑,让SQL可读性更强。
正确SQL代码
SELECT col1 AS col, nom, prenom, age FROM your_table_name -- 替换成你的实际表名 PIVOT ( MAX(col3) FOR col2 IN ( 'nom' AS nom, 'prenom' AS prenom, 'age' AS age ) );
代码说明
- 移除表别名的
AS:遵循Oracle语法规范,表别名直接跟在表名后; IN子句指定列别名:通过'nom' AS nom的写法,将转置后的列名设置为不带引号的nom,匹配你需要的输出结构;- 聚合函数选择:因为每个
Personne+col2的组合只有唯一值,用MAX()或MIN()效果完全一致,且你的age是字符串类型,无需做类型转换,直接使用即可; - 分组逻辑:
PIVOT会自动按非聚合列(这里是col1)分组,将同一Personne对应的不同col2值转为列。
执行结果
运行后会得到你预期的转置表结构:
| col | nom | prenom | age |
|---|---|---|---|
| Personne1 | Aurélie | Dupont | 25 |
| Personne2 | Stéphane | Blanc | 45 |
内容的提问来源于stack exchange,提问作者Ruser-lab9
相关产品推荐
相关产品推荐

