PL/SQL Select 行中的值(垂直)

PL/SQL Select values in rows (vertical)

我正在尝试从我的数据库中 select 值。现在我得到水平显示的结果集,但我希望它以垂直方式显示。

SELECT * FROM myTable;

使用此查询,结果如下所示:

ID | Name | Age | City_id
1    A       20    2

但我希望它看起来像这样:

1
A
20
2

我的问题有解决方案吗?

我尝试使用 UNPIVOT 但没用

我在 XE 数据库上制作了这个示例,table 名员工。您可以使用枢轴子句:

select first_name from employees
pivot(
sum(salary) for department_id in (50)
);

输出:

   Bruce
    Luis
    Den
    Shanta
    Renske
    Oliver
    Clara
    Alexis
...

.

PIVOT
(
PIVOT_CLAUSE
PIVOT_FOR_CLAUSE
PIVOT_IN_CLAUSE
) 

条款 - 这是一个函数(此处:sum())

FOR_CLAUSE - 确定作为创建列的基础的数据

IN_CLAUSE - 确定此数据的范围(此处:department_id,可能是 hire_date、眼睛颜色、狗类型等)

您的要求没有多大意义,但是您想要实现的,可以通过Union

完成

试试这个

 select cast(id as varchar2(20)) as col1 from myTable
 union all
 select Name from mytable
 union all
 select cast(Age as varchar2(20))  from mytable
 union all
 select cast(City_id as varchar2(20)) from mytable

Xml 和 xquery 。

select * from xmltable('for $i in ./ROWSET/ROW/* return $i' 
passing xmltype(dbms_xmlgen.getxml('select * from all_objects where rownum < 2'))
     columns colum_name varchar2(100) path 'local-name()'
             ,         text varchar2(100) path 'text()'
     );

在你的情况下,你可以像下面这样使用它

select text from
(     
select * from 
xmltable('for $i in ./ROWSET/ROW/* return $i' 
passing xmltype(dbms_xmlgen.getxml('select * from myTable where rownum < 2'))
     columns colum_name varchar2(100) path 'local-name()'
             ,text varchar2(100) path 'text()'
             )
 )