Сортировать по максимальному условию соответствия - PullRequest
7 голосов
/ 20 июля 2010

Пожалуйста, помогите мне создать запрос на выборку, который содержит предложение 10 'where' и порядок должен быть таким: результаты должны отображаться в порядке соответствия большинства ключевых слов (если условия) минимальному.

ПРИМЕЧАНИЕ: все 10 условий имеют «ИЛИ».

Пожалуйста, помогите мне создать этот запрос. я использую ms-sql server 2005

Как:

Select *
  from employee
 where empid in (1,2,4,332,434)
    or empname like 'raj%'
    or city = 'jodhpur'
    or salary >5000

В приведенном выше запросе все те записи, которые соответствуют максимальным условиям, должны быть сверху, а менее подходящие записи условий должны быть внизу.

Ответы [ 4 ]

13 голосов
/ 20 июля 2010
SELECT *
  FROM (SELECT (CASE WHEN cond1 THEN 1 ELSE 0 END +
                CASE WHEN cond2 THEN 1 ELSE 0 END +
                CASE WHEN cond2 THEN 1 ELSE 0 END +
                ...
                CASE WHEN cond10 THEN 1 ELSE 0 END
               ) AS numMatches,
               other_columns...
          FROM mytable
       ) xxx
 WHERE numMatches > 0
 ORDER BY numMatches DESC
2 голосов
/ 20 июля 2010

РЕДАКТИРОВАТЬ: Этот ответ был опубликован до изменения вопроса с конкретным примером. Решение Марсело решает актуальную проблему.С другой стороны, в моем ответе приоритет отдавался совпадениям определенных полей.


Возможно, вы захотите попробовать что-то вроде следующего, используя те же выражения в предложении ORDER BY, что и в вашем WHERE предложение:

SELECT    *
FROM      your_table
WHERE     field_1 = 100 OR
          field_2 = 200 OR
          field_3 = 300
ORDER BY  field_1 = 100 DESC,
          field_2 = 200 DESC,
          field_3 = 300 DESC;

Недавно я ответил на аналогичный вопрос о переполнении стека, который вам может быть интересен:

0 голосов
/ 02 ноября 2017

Я не мог заставить это работать на меня на Oracle. Если используется оракул, то это Порядок по максимальному совпадению условия является хорошим решением. Использует случай, когда языковая функция

0 голосов
/ 20 июля 2010

Есть много вариантов / ответов.Лучший ответ зависит от размера данных, нефункциональных требований и т. П.

...