2010-05-28 22 views

Respuesta

53

Teniendo en cuenta estos datos de prueba ...

SQL> select * 
    2 from your_table 
    3/

NAME   M1   M2   M3   M4 
---- ---------- ---------- ---------- ---------- 
A    1   2   3   4 
B    6   3   4   5 
C    1   5   2   1 

SQL> 

... un() llamada MAYOR directa dará el resultado deseado:

SQL> select name 
    2   , greatest(m1,m2,m3,m4) 
    3 from your_table 
    4/

NAME GREATEST(M1,M2,M3,M4) 
---- --------------------- 
A      4 
B      6 
C      5 

SQL> 
+4

+1 ¡Guau! He estado trabajando con Oracle desde que el 7.3.4 era nuevo, y nunca supe que existía esa función. –

+0

@MarkBaker: se introdujo en Oracle8.0. – APC

+1

Nah, es más viejo que eso. Está en el manual de Oracle 7.3 –

12

Uso GREATEST sino también manejar posible NULL 's

SELECT name, GREATEST(NVL(m1,0), NVL(m2,0), NVL(m3,0), NVL(m4,0)) AS "Max" 
FROM yourtable 

Entrada:

name m1 m2 m3 m4 
A 1 2 3 4 
B 6 3 4 5 
C 1 5 2 1 

Salida:

NAME Max 
A 4 
B 6 
C 5 

SQL violín: http://sqlfiddle.com/#!4/ae268/7/0

de entrada:

name m1 m2 m3 m4 
A 1 2 3 null 
B 6 null 4 5 
C 1 5 2 1 

Salida:

NAME Max 
A 3 
B 6 
C 5 

SQL violín: http://sqlfiddle.com/#!4/b1c46/1/0

Cuestiones relacionadas