我试图从我的数据库中选择值。现在我将结果集水平显示但我想以垂直方式显示它。
SELECT * FROM myTable;
使用此查询,结果如下所示:
ID | Name | Age | City_id 1 A 20 2
但我希望它看起来像这样:
1 A 20 2
我的问题是否有解决方案。
我尝试使用UNPIVOT
但是没有工作
答案 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,眼睛颜色,狗类型等)