在数据透视期间指定列时标识符无效 - ORA-00904
Posted
技术标签:
【中文标题】在数据透视期间指定列时标识符无效 - ORA-00904【英文标题】:Invalid Identifier When Specifying Columns During Pivot - ORA-00904 【发布时间】:2020-01-22 17:12:22 【问题描述】:在尝试创建数据透视表时,我在以下查询中收到 ORA-00904 invalid identifier
错误。
表定义
create table table1(id int, name varchar2(20), col1 int);
insert into table1 values(1, 'Alex', 99);
insert into table1 values(2, 'Alex', 98);
insert into table1 values(3, 'James', 97);
insert into table1 values(4, 'Eric', 99);
insert into table1 values(5, 'Stan', 99);
错误查询
select name, col1
from table1
pivot (count(name) for col1 in (99, 98, 97))
;
但是,以下查询将起作用
工作查询 1
select *
from table1
pivot (count(name) for col1 in (99, 98, 97)) p
;
工作查询 2
with cte as (
select name, col1
from table1
)
select *
from cte
pivot (count(name) for col1 in (99, 98, 97))
;
我更喜欢 Working Query 2 的输出,因为我得到的计数不包括所有其他数据
99 | 98 | 97
-------|----|-------
3 | 1 | 1
为什么在直接从表中指定列时尝试进行透视时会出现错误?
SQL Fiddle Example - Error is on 3rd query
【问题讨论】:
【参考方案1】:在pivot
之后,name
不再在结果集中。它已被名称如“99”的计数和列替换。
这就是为什么人们经常使用select *
和pivot
。大多数列已经在in
子句中列出。
【讨论】:
以上是关于在数据透视期间指定列时标识符无效 - ORA-00904的主要内容,如果未能解决你的问题,请参考以下文章
引导层初始化期间发生错误。 plexus.container.default:无效的模块名称:'default' 不是 Java 标识符