2015-12-23 21 views
-1

我有一個的Oracle 11g表至極都有一個唯一的ID和數值數列中選擇多個列最高值,它看起來像這樣:在一個元組ORACLE

ID COL1 COL2  COL3 ... COLn 
1 0  15  20   12 
2 4  0  10   0 
3 20  0   3   8 

我需要知道,對於每行,包含最高值的列以及列名稱。在這個例子中,例如,如果我選擇ID = 1時,結果應該是:

COL3 
____ 
20 

我曾嘗試用最大的功能,但它只是返回值而不是列名。另一種方法是使用CASE語句,但是這個表格有300多列,並且一對一的比較會很糟糕。我聽說過使用PIVOT功能,但我不知道如何應用它。任何建議,非常感謝!

+0

應該顯示哪些列名稱爲您的樣本數據?第一行的最高值在'col3'中,第三行的值在'col1'中。您的示例數據僅顯示單行結果。什麼列名應該用於多行? –

回答

0

嘗試:

SELECT D, COLUMN_NAME, VA_LUE 
FROM (
    SELECT D, COLUMN_NAME, VA_LUE, MAX(VA_LUE) OVER (partition by D) as Max_Value 
    FROM table1 
    UNPIVOT(
     va_lue FOR column_name IN ("COL1", "COL2", "COL3", ........ 
      ......................., "COLN") 
    ) 
) 
WHERE VA_LUE = MAX_VALUE; 

演示:http://sqlfiddle.com/#!4/13fd5/1

+0

完美地工作!非常感謝 – Ramiro