Pergunta

Usando um bloco de caso, preciso escolher como encomendar minha consulta SQL 2008, por [status] ASC, [date] DESC ou apenas [date] DESC.

Eu sei apenas como usar uma coluna:

SELECT *
FROM table
ORDER BY
    CASE WHEN @flag = 0
        THEN R.[date] END DESC,
    CASE WHEN @flag = 1
        THEN R.[status] END ASC

Como usar as duas colunas no segundo caso?

Foi útil?

Solução

  • Se sua bandeira for 0, então pediremos por (NULL, R.Date Desc).
  • Caso contrário, vamos encomendar por (R.Status, R.Date Desc)

Use a expressão do caso para "projetar" um novo valor para solicitar.

SELECT *
FROM table
ORDER BY
  CASE WHEN @flag = 0 THEN r.Status ELSE null END,
  r.[date] desc

Outras dicas

Normalmente, para colocar pedidos condicionais, basta repetir a declaração do caso.

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
;

Mas, no seu caso, a sobreposição de 'data' significa que você pode simplificá -lo como o comentário de David B.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top