2010-09-09 139 views
0

我有一個表,這個結構:錶轉換 - 甲骨文

date colname value 
---------------------------- 
date col1name col1's value 
date col2name col2's value 
date col3name col3's value 

現在我需要把它轉換成這種結構:

date col1name  col2name  col3name 
----------------------------------------------- 
date col1's value col2's value col3's value 

這可能嗎?

+0

@OMG感謝編輯,這正是我所要求的。 – sarahTheButterFly 2010-09-09 04:58:06

回答

2

你想要一個透視表:

SELECT t.date, 
     MAX(CASE WHEN t.colname = 'col1name' THEN t.value END) AS col1name, 
     MAX(CASE WHEN t.colname = 'col2name' THEN t.value END) AS col2name, 
     MAX(CASE WHEN t.colname = 'col3name' THEN t.value END) AS col3name 
    FROM TABLE t 
GROUP BY t.date 

如果你想讓它動態的基礎上,colname的價值,你需要使用dynamic SQL,因爲你需要建造之前,首先讓colname的列表實際的查詢。

Oracle在11g之前沒有添加PIVOT/UNPIVOT支持。 CASE表達式支持9i +;在9i之前,你必須使用DECODE ...

+0

嗨小馬。感謝您的回覆。但這不是關於秩序,而是關於平坦的前一張桌子。即在您的答案中「導入數據」,我不知道該怎麼做。 – sarahTheButterFly 2010-09-09 04:55:30

+0

@sarahTheButterFly:當我看到您更改格式時更新。 – 2010-09-09 04:56:56

+0

是的,它的工作原理!謝謝! – sarahTheButterFly 2010-09-09 05:27:43