2009-10-23 8 views

Respuesta

12

Si sabe que salaryplus siempre será mayor que salaryminus, entonces usted puede hacer

order by coalesce(salaryplus, salaryminus, 0) 

coalesce devolverá el primer valor que no es nulo, o (en este ejemplo) 0, si ambos valores son nulo.

De lo contrario, hacer algo como esto:

order by greatest(ifnull(salaryminus,0), ifnull(salaryplus,0)) 

Esto tratar tanto salaryminus y salaryplus como 0 si son nulos, y ordenará por el mayor de los dos.

+1

Tenga en cuenta que 'GREATEST' no es SQL estándar. – Charles

+1

No está en el estándar, pero lo proporcionan MySQL, así como PostgreSQL y Oracle. Se deletrea "' MAX' "en SQLite. Si tiene que usar SQL Server, o necesita escribir SQL estándar para una pregunta de tarea, use "' ORDEN POR CASO WHERE salarymin> salaryplus ENTONCES salaryminus ELSE salaryplus END "" –

0

Puede usar coalesce para convertir columnas posiblemente nulas en valores específicos; por ejemplo, coalesce(salaryminus, -99999999) dará un número negativo grande si el salario mínimo es nulo, pero devolverá el salario mínimo si no es nulo.

Cuestiones relacionadas