Caso em ordem por poucas colunas
-
18-09-2019 - |
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?
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