Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在Oracle 11g中将动态列转换为行?_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql 如何在Oracle 11g中将动态列转换为行?

Sql 如何在Oracle 11g中将动态列转换为行?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图在Oracle11g中将动态列转换为行。我知道可以使用unpivot,但只能使用预先存在的列,而不能使用动态列 数据输入: select 'Bulding1', 'Building2', 'Building3', 'Building4', 'Building5','Building6' from dual; 预期产出: Column_Name ----------- - Building1 - Building2 - Building3 - Building4 - Building5

我试图在Oracle11g中将动态列转换为行。我知道可以使用unpivot,但只能使用预先存在的列,而不能使用动态列

数据输入:

select 'Bulding1', 'Building2', 'Building3', 'Building4', 'Building5','Building6' 
from dual;
预期产出:

Column_Name
-----------
- Building1
- Building2
- Building3
- Building4
- Building5
- Building6
- Building7
使用UNION ALL:

或使用UNPIVOT:


如何构建具有可变列数的查询?您使用的是动态SQL吗?不是完全动态SQL,而是普通SQL。我有两个查询,第一个是将这个动态数据返回到外部查询,现在这个外部查询需要将这个动态数据变成行;最里面的查询如何给出可变的列数?感谢您的帮助MT0,第一个查询工作正常,但第二个查询出现错误ORA-00904::invalid identifier。@Palan第二个查询在Oracle 12c和MT0上对我有效,我也在使用12c,但仍然收到无效标识符错误。这是DB:Oracle Database 12c Enterprise Edition 12.1.0.2.0-64位ProductionMT0的实际版本。如果可能,请发布第二次查询成功的屏幕截图。
SELECT 'Building1' AS column_name FROM DUAL
UNION ALL
SELECT 'Building2' FROM DUAL
UNION ALL
SELECT 'Building3' FROM DUAL
UNION ALL
SELECT 'Building4' FROM DUAL
UNION ALL
SELECT 'Building5' FROM DUAL
UNION ALL
SELECT 'Building6' FROM DUAL;
SELECT column_name
FROM   (
  SELECT 'Building1',
         'Building2',
         'Building3',
         'Building4',
         'Building5',
         'Building6' 
  FROM   DUAL
)
UNPIVOT(
  column_name FOR name IN (
    "'BUILDING1'",
    "'BUILDING2'",
    "'BUILDING3'",
    "'BUILDING4'",
    "'BUILDING5'",
    "'BUILDING6'"
  )
);