Pregunta

Aquí hay una interesante ... espero poder explicarlo bien ...

Tengo una colección de concursos en una sola tabla en mi SQL Server DB. Estoy haciendo una búsqueda de texto completo sobre ellos, lo que funciona bien. Sin embargo, algunas de las competiciones están cerradas, y quiero que estas composiciones cerradas aparezcan después de las composiciones abiertas, sin dejar de respetar el rango que obtenemos de la búsqueda de texto completo.

Entonces, si tuviera un campo de bits IsOpen, los ordenaría por

ORDER BY IsOpen DESC, KEY_TBL.Rank DESC

Ahora el problema es que no tengo un campo de bit IsOpen. En cambio, tengo un campo ClosedDate, que es una fecha y hora.

Entonces, lo que realmente necesito hacer es algo como:

ORDER BY (ClosingDate < GetDate()) ASC, KEY_TBL.Rank DESC

¿Alguien sabe cómo hacer esto?

¡Cualquier idea sería genial! Gracias de antemano.

-Ev

¿Fue útil?

Solución

ORDER BY
  CASE
    WHEN (ClosingDate < GetDate())
    THEN 1
    ELSE 0
  END ASC,
  KEY_TBL.Rank DESC

Otros consejos

agregue (ClosingDate < GetDate ()) a los campos SELECCIONADOS y ordene por ese campo

select ... , add (ClosingDate < GetDate()) as Foo
from ...
where ...
order by foo

posiblemente agregar (ClosingDate < GetDate ()) no será aceptado, entonces deberá usar      IF (add (ClosingDate < GetDate ()); 1; 0)

No sé la sintaxis de esa función IF de memoria, ¡búsquela!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top