Compte tenu de ces données de test ...
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 simple appel à GREATEST() donnera le résultat souhaité :
SQL> select name
2 , greatest(m1, m2, m3, m4) as the greatest_m
3 from your_table
4 /
NAME THE_GREATEST_M
---- --------------
A 4
B 6
C 5
SQL>
Notez que greatest()
renverra NULL si l'un des arguments est nul. Si c'est un problème, utilisez nvl()
pour fournir une valeur par défaut qui ne faussera pas le résultat. Par exemple, si aucune valeur ne peut être négative...
SQL> select name
2 , greatest(nvl(m1,0), nvl(m2,0), nvl(m3,0), nvl(m4,0)) as the greatest_m
3 from your_table
4 /
NAME THE_GREATEST_M
---- --------------
A 4
B 6
C 5
SQL>