例如,我执行了以下查询:
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*? |
答案 0 :(得分: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
答案 1 :(得分:1)
如果你不想为每个搜索词写两次类似的条件,你可以使用条件聚合的cte:
创建并填充样本表(请在将来的问题中保存此步骤)
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?