4

我需要以水平方式显示查询输出。我有一些示例数据

create table TestTable (id number, name varchar2(10))

insert into TestTable values (1, 'John')
insert into TestTable values (2, 'Mckensy')
insert into TestTable values (3, 'Valneech')
insert into TestTable values (4, 'Zeebra')

commit

select * from TestTable

这将在垂直视图中获得输出。

ID Name
==========
1  John
2  Mckensy
3  Valneech
4  Zeebra

但是,我需要水平显示它。

ID   1    2       3        4
Name John Mckensy Valneech Zeebra

怎么能做到这一点?

4

3 回答 3

3

要进行数据透视,您应该使用select 语句的数据透视子句:

select *
  from testtable
 pivot ( max(name)
         for id in (1,2,3,4)
       )

这在 SQL 中并不是特别漂亮,因此您应该仔细考虑这是否是您想要做的。我通常使用Oracle Base来旋转示例,但那里有很多。

这是一个小SQL Fiddle来演示。

于 2012-09-08T07:40:52.513 回答
1

也许它会帮助你:

select 'id', LISTAGG(id, ' ') WITHIN GROUP (ORDER BY name)      
from testtable
union 
select 'name', LISTAGG(name, ' ') WITHIN GROUP (ORDER BY name)
from testtable

编辑:

或使用枢轴:

create table TestTable2 (id varchar2(30), name varchar2(10));

insert into TestTable2 values ('id', 'name');


insert into TestTable2
select cast(id as varchar2(30)) as id , name
from testtable

  select *
    from testtable2
    pivot (  max(name)
             for id in ('id',1,2,3,4) 
)
于 2012-09-08T07:36:34.803 回答
0

PIVOT运算符是您正在寻找的。

于 2012-09-08T07:36:08.173 回答