0
我有一个前端的搜索框,用户可以搜索某人的名字,中间名,姓或职称和散装的后端代码是这样的:TSQL搜索框名字姓氏顺序优先级
SELECT TOP 50 * FROM (SELECT [EmployeeId], SUM(MatchOrder) as MatchOrder
FROM (SELECT
[EmployeeId],
CASE WHEN A.[EmployeeFieldId] = 4 Then 15 --Surname
WHEN A.[EmployeeFieldId] in (1, 2) Then 15 --PreferredName, FirstName
WHEN A.[EmployeeFieldId] = 3 Then 5 --MiddleName
WHEN A.[EmployeeFieldId] = 5 Then 20 --JobTitle
ELSE 3
END as MatchOrder
FROM [latest].[EmployeeAttributes] A
WHERE (' + @search + ')
) internal
GROUP BY EmployeeId) A
join dbo.vwEmployees E on E.EmployeeId = A.EmployeeId -- TEMP
ORDER BY 2 DESC'
每个employeeID都会得到一个分数(MatchOrder),这个分数取决于满足上述多少条件(例如First Name + Surname match = 30),然后根据MatchOrder分数排序以显示在前端,但问题是,如果某人的姓和名是非常相似的,例如帕特里克帕特森和我只搜索帕特赖斯,帕特里克帕特森(30分)出现在帕特里克赖斯(30分)以上,因为名字匹配两次。
我想它要么降低分的成绩如果比赛是双发,或修改我的switch语句以某种方式做到这一点(巢式病例?
你知道我怎么能解决这个问题?任何帮助将不胜感激。
感谢
嘿@duney - 为你做了这项工作吗?让我知道,如果它没有给你你想要的和关于需求的更多细节,我可以提供帮助。 – 2014-09-11 20:09:47