Ordenar según la palabra clave ingresada

Estoy enfrentando un problema en orden, estoy obteniendo los registros de SQL DB en función de la palabra clave con like, ahora quiero que todos los registros se devuelvan según el orden de palabras clave ingresadas. Ejemplo: si el usuario ingresa "Física", primero devuelve la Física (palabra exacta) si existe, luego devuelve todos los demás registros.

SELECT *
FROM Subject SM
WHERE SM.SubjectName LIKE '%' + @SubjectName + '%'
ORDER BY @SubjectName DESC

¿Cómo puedo conseguir esto?

preguntado el 27 de agosto de 11 a las 14:08

2 Respuestas

SELECT  *
FROM    Subject SM
WHERE   SM.SubjectName LIKE '%' + @SubjectName + '%'
ORDER BY CASE WHEN SM.SubjectName = @SubjectName THEN 0
              ELSE 1
         END ASC ,
        SM.SubjectName DESC

Respondido 27 ago 11, 18:08

puede agregar más relevancia:

SELECT            *
FROM     ( SELECT *,
                 CASE
                         WHEN name = 'qqq'
                         THEN 1
                         WHEN name LIKE 'qqq%'
                         THEN 2
                         WHEN name LIKE '%qqq%'
                         THEN 3
                         ELSE 0
                 END AS weight
         FROM    t
         )
         q
WHERE    q.weight > 0
ORDER BY q.weight,
         q.name

Respondido 27 ago 11, 18:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.