CASO en orden por algunas columnas
-
18-09-2019 - |
Pregunta
El uso de un bloque de casos y luego, tengo que elegir cómo ordenar mi consulta SQL 2008, por [status] ASC, [date] DESC
o simplemente [date] DESC
.
Sólo sé cómo usar una columna:
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0
THEN R.[date] END DESC,
CASE WHEN @flag = 1
THEN R.[status] END ASC
¿Cómo utilizar las dos columnas en el segundo caso?
Solución
- Si el indicador es 0, entonces vamos a pedir por (null, r.date desc).
- Si no es así, vamos a ORDER BY (r.Status, desc r.date)
Utilice la expresión CASE "proyectar" un nuevo valor para el pedido.
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN r.Status ELSE null END,
r.[date] desc
Otros consejos
Normalmente, para poner orden condicional en, usted sólo tiene que repetir la instrucción CASE.
SELECT *
FROM table
ORDER BY
CASE WHEN @flag = 0 THEN R.[date] END DESC,
CASE WHEN @flag = 0 THEN R.[somethingelse] END ASC,
CASE WHEN @flag = 1 THEN R.[status] END ASC
;
Sin embargo, en su caso, la superposición de 'fecha' significa que se puede simplificar como el comentario de David B.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow