PL / SQL选择行中的值(垂直)

时间:2016-06-02 09:22:50

标签: sql oracle unpivot

我试图从我的数据库中选择值。现在我将结果集水平显示但我想以垂直方式显示它。

SELECT * FROM myTable;

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

ID | Name | Age | City_id
1    A       20    2

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

1
A
20
2

我的问题是否有解决方案。

我尝试使用UNPIVOT但是没有工作

3 个答案:

答案 0 :(得分:4)

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()'
             )
 )

答案 1 :(得分:1)

您的要求没有多大意义,但您希望实现的目标可以通过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

答案 2 :(得分:-1)

我在XE数据库,表员工上做了这个例子。您可以使用Pivot子句:

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
) 

CLAUSE - 这是一个函数(这里:sum())

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

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