2015-12-23 3 views
-1

У меня есть Oracle 11g таблица которым имеет уникальный идентификатор и несколько столбцов с числовыми значениями, это выглядит следующим образом:Выберите наибольшее значение из нескольких столбцов в одном наборе 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

Try:

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

Смежные вопросы