2012-09-08 81 views
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 

如何才能做到這一點?

+0

這更像是一個顯示格式問題,爲什麼你會希望數據像這樣從數據庫中出來,當然通過某些報告服務在前端執行此操作會更容易。 – Qpirate

+1

嗨戰士,謝謝。對於我的要求,後端數據非常少。我們沒有使用任何報告工具。如果我通過查詢獲取數據,我的工作就完成了100%。所以我需要這個查詢。謝謝。 – user1656315

回答

0

PIVOT運營商是你在找什麼。

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

嗨,謝謝。你的回覆非常接近我的要求。但輸出應該在列中。不只是列之間的空間。更多的幫助表示讚賞。謝謝 – user1656315

+0

嘗試樞軸,我編輯後。 – Parado

3

轉動,你應該使用select語句的pivot clause

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

在SQL中這不是特別漂亮,所以你應該仔細考慮這是否是你想要做的。我通常使用Oracle Base作爲示例,但有很多。

這裏有一點SQL Fiddle來演示。

+0

SQL小提琴鏈接不再有效,但沒有任何人因爲發佈此答案而感到驚訝。你能更新嗎? – AWrightIV

+0

[SQL小提琴通常不再工作](http://meta.stackoverflow.com/q/321437/458741)@AWright,它不是特定於此答案。我無法加載,但重新讀這個答案,它將是一些示例數據和一個簡單的樞軸聲明。更多的是「嘗試自己」比任何新的信息。 OP已經爲一個小例子提供了DDL和DML,所以應該很簡單,自己來運行它。 – Ben