2017-03-16 127 views
0

我有以下表格格式:轉換水平臺垂直在Oracle

ID | Key | Value 
-- --- ----- 
1  A  aa  
2  B  bb 
3  A  ay 
4  C  cc 
5  B  bx 
6  C  ct 

我需要這個錶轉換爲以下格式:

輸出:

A B C 
--- --- --- 
aa bb cc 
ay bx ct 

我在oracle 11g中查找PIVOT函數,但輸入表中的「Key」值不是一組固定值,它們可以是任何值。 我也尋找其他這樣的問題,但我不知道在我的情況下,應該如何寫查詢。

任何幫助將不勝感激,謝謝!

編輯:

對於解決方案,我想執行下面的查詢,但它給了我錯誤的IN子句的子查詢。我不明白這是爲什麼。

Select * from (Select Key, Value, Id from tableName 
pivot (max(Value) for Key IN (SELECT distinct Key from tableName))); 

謝謝!

回答

1

您可以如下應用pivot函數。

select * from 
    (select Key,Value from yourtable) 
    pivot(max(Value) for Key in ('A', 'B', 'C')); 

樞軸的子查詢只用於與XML關鍵字

結合讓你的查詢,如下:

Select * from (Select Key, Value, Id from tableName) 
pivot xml (max(Value) for Key IN (SELECT distinct Key from tableName)); 
+0

謝謝@Tom,但按照您的建議製作括號並沒有解決問題。我不知道爲什麼我發現沒有這樣的子查詢樞軸的例子。 – OutOfMind

+1

我想你必須使用'pivot xml'來使用子查詢。您將以xml格式獲得輸出。 –

+0

嗯,但我需要輸出爲不帶xml標籤的表格形式,所以我寧願先執行子查詢並在Pivot查詢中使用它的結果。謝謝! – OutOfMind

1

您可以使用動態SQL正如你所說,關鍵是不固定 爲鍵創建一個字符串,這將幫助你。將這個字符串傳遞給你的pivot函數,因爲這些鍵在字符串中,所以這會幫助你。

+0

Thanks @Rohit,我編輯了這個問題,請看看它。 Pivot函數是否允許這樣的子查詢?或者我將不得不按照你的建議使用Dynamic Sql? – OutOfMind

+1

我認爲子查詢不會幫助您,請轉到鏈接瞭解數據透視表中的動態查詢如何幫助您。 http://stackoverflow.com/questions/13245364/ms-sql-server-pivot-table-with-subquery-in-column-clause –

+0

@RohitGupta你添加的鏈接是對Sql Server。問題是'oracle' –