Порядок Максимальным соответствием условия

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

Примечание: все 10 условий с "ИЛИ".

Помогите мне создать этот запрос. я использую SQL-сервер мс 2005

Как:

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

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

7
задан Marcelo Cantos 20 July 2010 в 10:47
поделиться

3 ответа

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
13
ответ дан 6 December 2019 в 14:00
поделиться

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


Вы можете попробовать что-то вроде следующего, используя те же выражения в предложении 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;

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

2
ответ дан 6 December 2019 в 14:00
поделиться

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

Тем не менее, я бы сделал что-то вроде этого (легко читать / отлаживать):

  Select * from 
    (Select *, iif(condition1 = bla, 1, 0) as match1, ..... , match1+match2...+match10 as totalmatchscore from sourcetable
    where 
      condition1 = bla or
      condition2 = bla2
      ....) as helperquery
    order by helperquery.totalmatchscore desc
0
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: