【发布时间】:2020-09-01 19:46:04
【问题描述】:
初始表学生
NAME School Class
John Hs English
Steve Hs Maths
Matthew Hs Science
Jim Hs History
需要输出:我需要查询从初始表中自动获取名称列数据并将其更改为输出中的列标题,并且由于名称会不断更改,因此我无法使用简单的数据透视查询对名称进行硬编码。我是枢轴查询的新手,所以我想询问是否有人可以帮助我。谢谢。
School John Steve Matthew Jim
Hs English Maths Science History
这是我尝试过的:*注意(我正在尝试在 Oracle Sql Developer 中使用此查询来实现输出格式)
declare
sqlqry clob;
cols clob;
begin
select listagg('''' || NAME || ''' as "' || NAME || '"', ',') within group (order by NAME)
into cols
from (select distinct NAME from Students);
sqlqry :=
'
select * from(select NAME,SCHOOL,CLASS from Students)
pivot(MAX(CLASS) FOR NAME IN (' || cols || ')
)';
execute immediate sqlqry;
end;
【问题讨论】:
-
pl/sql 片段看起来不错。有什么错误吗?
-
是的,当我在 sql developer 中运行它时,它会在命令的第 1 行给出一个未知错误。
-
我认为不应该这样写。 PL SQL 有一些问题。这是有效的
select * from(select NAME,SCHOOL,CLASS from Students) pivot(MAX(CLASS) FOR NAME IN ( select listagg('''' || NAME || ''' as "' || NAME || '"', ',') within group (order by NAME) as col from (select distinct NAME from Students)) ) -
它给了我一个缺少表达式的错误
标签: oracle plsql pivot oracle-sqldeveloper dynamic-pivot