SQL Server - Tratar con valores NULL al ordenar

Cuando trabaje con valores NULL, es importante cómo trata los registros NULL en su base de datos. Este ejemplo describe y explica cómo ordenar y separar los valores NULL y no NULL. Este ejemplo debería funcionar con todos los tipos de bases de datos, incluyendo MySQL, MS SQL y postgreSQL.

Vamos a empezar con un ejemplo.

Considere la posibilidad de una mesa de empleados.

eid ename salario comisión ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 marca 2500 NULL 103 steve 3500 NULL 104 rey 5500 0 104 barrio 1500 300 105 adam 5500 800

Ahora, usted quiere ordenar los resultados de la tabla de empleados por el comisión columna. Sin embargo, esta columna es anulable, por lo que tendremos que especificar si los valores NULL se ordenan en último o último lugar.

El resultado podría contener NULL ordenados primero o último ordenados.

seleccione * del pedido del empleado por comisión; eid ename salario comisión ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 marca 2500 NULL 103 steve 3500 NULL 104 rey 5500 0 104 sala 1500 300 105 adam 5500 800 (7 fila (s) afectadas)
seleccione * del pedido del empleado por comisión desc; eid ename salario comisión ----------- -------------------- ----------- ---- ------- 105 adam 5500 800 104 sala 1500 300 104 rey 5500 0 100 jon 2000 NULL 101 tim 2200 NULL 102 marca 2500 NULL 103 steve 3500 NULL (7 fila (s) afectadas)
 

Las consultas anteriores clasifican los resultados para la columna que admite nulos (comisión). Si desea ordenar los valores no NULL en orden ascendente y descendente y colocar los valores NULL primero o último, puede usar subconsultas con expresión de caso.

Usando una expresión de caso, puede marcar valores NULL y valores no NULL. Una vez realizado, puede agregar una columna de marca en orden por cláusula. Luego puede ordenar fácilmente los valores que no son NULL en orden ascendente / descendente o los valores NULL en la primera o última posición.

Ordenar los valores que no son NULL en orden ascendente o descendente.

seleccione eid, ename, salario, comisión de (seleccione *, en caso de que la comisión sea nula, 1 más 0 finalice como is_null del empleado) x orden por is_null, comisión; eid ename salario comisión ----------- -------------------- ----------- ---- ------- 104 king 5500 0 104 ward 1500 300 105 adam 5500 800 100 jon 2000 NULL 101 tim 2200 NULL 102 mark 2500 NULL 103 steve 3500 NULL (7 fila (s) afectadas)
 

En la consulta anterior, hemos ordenado los no NULL en orden ascendente con NULL por fin.

Ordenar NULL primero y no NULL en orden descendente.

seleccione eid, ename, salario, comisión de (seleccione *, en caso de que la comisión sea nula, entonces 1 más 0 finalice como is_null del empleado) x orden por is_null desc, comisión desc; eid ename salario comisión ----------- -------------------- ----------- ---- ------- 100 jon 2000 NULL 101 tim 2200 NULL 102 marca 2500 NULL 103 steve 3500 NULL 105 adam 5500 800 104 sala 1500 300 104 rey 5500 0 (7 fila (s) afectadas)
 

Ahora puede ver los resultados valores NULL ordenados primero y no NULL en orden descendente.