2016-09-06 4 views
0

Например я выполнил следующий запрос:T-SQL сортировать по наиболее искали слова, содержащие в колонке

Select 
    id, question 
From 
    tblQuestions 
Where 
    question like '%Leave%' 
    or question like '%Balances%' 
    or question like '%Policy%' 

Он будет возвращать строки, где question содержит любой из указанных выше 3 слов. Возможно ли, что результат отсортирован таким образом, что вопрос, содержащий большинство слов в вышеприведенном запросе, должен быть первым и так далее (как показано в таблице ниже). (искомые слова могут быть больше, чем три)

| id | question         | 
|----|--------------------------------------------| 
| 8 | Define the *policy* of *leave* *balances*? |  
| 2 | Why my *leave* *balance* is 0    |  
| 1 | What is *leave*?       | 

ответ

1

Если вы не хотите писать, как условия дважды для каждого термина поиска, вы можете использовать КТР с условным aggrigation:

Создание и заполнение таблицы (образец Пожалуйста сохранить нас этот шаг в ваших будущих вопросов)

DECLARE @T as table 
(
    Id int, 
    Question varchar(200) 
) 

INSERT INTO @T VALUES 
(1,'What is leave?'), 
(2,'Why my leave balance is 0?'), 
(3, 'Where is my mind?'), 
(8,'Define the policy of leave balances?') 

запрос:

;WITH CTE AS 
(
    SELECT Id, 
      Question, 
      SUM(CASE WHEN Question Like '%Leave%' THEN 1 ELSE 0 END) + 
      SUM(CASE WHEN Question Like '%Balance%' THEN 1 ELSE 0 END) + 
      SUM(CASE WHEN Question Like '%Policy%' THEN 1 ELSE 0 END) As MatchCount 
    FROM @T 
    GROUP BY Id, Question 
) 

SELECT Id, 
     Question 
FROM CTE 
WHERE MatchCount > 0 
ORDER BY MatchCount DESC 

Результаты:

Id Question 
8 Define the policy of leave balances? 
2 Why my leave balance is 0? 
1 What is leave? 
1

Это то, что Full Test Search предназначен для. Кроме того, он может соответствовать различным форматам грамматики, то есть balances и balance. Вы все еще можете попытаться использовать обычный синтаксис, как в следующем фрагменте:

SELECT id, question 
FROM tblQuestions 
WHERE 
    question LIKE '%Leave%' 
    OR question LIKE '%Balance%' 
    OR question LIKE '%Policy%' 
ORDER BY 
    CASE WHEN question LIKE '%Leave%' THEN 1 ELSE 0 END + 
    CASE WHEN question LIKE '%Balance%' THEN 1 ELSE 0 END + 
    CASE WHEN question LIKE '%Policy%' THEN 1 ELSE 0 END DESC 
Смежные вопросы