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 ステートメントのpivot 句を使用する必要があります。

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 に答える