查询以水平显示输出

时间:2012-09-08 07:18:32

标签: sql oracle pivot

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

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

怎么能这样做?

3 个答案:

答案 0 :(得分:3)

要进行透视,您应该使用select语句的pivot clause

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

这在SQL中并不是特别好用,所以你应该仔细考虑这是否是你想要做的。我通常使用Oracle Base作为旋转示例,但那里有很多。

这里有一点SQL Fiddle来演示。

答案 1 :(得分:1)

也许它会对你有所帮助:

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

编辑:

或使用pivot:

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

答案 2 :(得分:0)

PIVOT运算符就是您要找的。