oracle 从宽到长的透视找不到表名

ehxuflar  于 2023-04-29  发布在  Oracle
关注(0)|答案(2)|浏览(123)

我正在运行下面的交叉应用SQL查询,但是,查询找不到表。
例如:

SELECT sport,event_names
FROM table_name t
CROSS APPLY 
(
    VALUES
        (event_1),
        (event_2),
        (event_3)
) x (event_names);
  1. 00000 -“无效的表名”
    我可以在运行以下查询时访问此表:
select * from table_name;
u2nhd7ah

u2nhd7ah1#

23c支持表值构造函数,但您可能希望使用文本文字来指定值。

SQL> create table table_name as select 0 sport;

Table created.

SQL> SELECT sport,event_names
  2  FROM table_name t
CROSS APPLY
(
    VALUES
        ('event_1'),
        ('event_2'),
        ('event_3')
) x (event_names);  3    4    5    6    7    8    9

     SPORT EVENT_N
---------- -------
         0 event_1
         0 event_2
         0 event_3

SQL> select banner from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
3b6akqbq

3b6akqbq2#

Oracle不支持表行构造函数语法VALUES()。您的代码看起来像SQL Server。
在Oracle中,你通常需要select ... from dual而不是values(),所以这个反透视查询将变成:

SELECT t.sport, x.event_names
FROM table_name t
CROSS APPLY (
    SELECT event_1 event_names FROM DUAL
    UNION ALL SELECT event_2 FROM DUAL
    UNION ALL SELECT event_3 FROM DUAL
) x

相关问题