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?

¿Fue útil?

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
scroll top