我使用完整搜索文字来实现搜索功能。基本上我将不得不用搜索字符串搜索所有列。搜索字符串将包含来自不同列的值的组合。但是我不知道我将要搜索的所有列。 例如,在全文SQL搜索中使用以下查询来查找基于姓氏,地址和邮编的客户
DECLARE @SearchString VARCHAR(200)
SET @SearchString = 'Adam OR West OR 60608'
SELECT Id, First_Name, Last_Name, Address,City,State,Zip, Rank
FROM Patient_Ex PAT
INNER JOIN CONTAINSTABLE(Patient_Ex,*, @SearchString) CT
ON PAT.Id = CT.[Key]
我得到了以下结果。
Id FirstName LastName Address City State Zip RankID
25 Adam Avenue Adam North Albay Avenue Chicago IL 60619 272
26 Adam Avenue West South Escaaba Avenue Chicago IL 60620 272
27 Adam Avenue Adam eclaire Avenue Chicago IL 60634 272
28 Adam Avenue West Leamington Avenue Chicago IL 60657 272
29 Adam Avenue Adam North England Avenue Chicago IL 60660 272
30 Adam Avenue West West 59th Street Chicago IL 60608 272
31 Adam Avenue Adam West 21st Place Chicago IL 60608 272
32 Adam Avenue West South Albay Avenue Chicago IL 60655 272
但是,我期待结果如下所示。如果同一行具有匹配的所有三个搜索条件,我希望它显示在顶部。在这种情况下,具有姓氏为Adam,包含West和Zip 60608的地址的记录应显示为最高记录。
Id FirstName LastName Address City State Zip RankID
30 Adam Avenue Adam West 59th Street Chicago IL 60608 272
31 Adam Avenue West West 21st Place Chicago IL 60608 272
27 Adam Avenue Adam eclaire Avenue Chicago IL 60634 272
28 Adam Avenue West Leamington Avenue Chicago IL 60657 272
29 Adam Avenue Adam North England Avenue Chicago IL 60660 272
25 Adam Avenue West North Albany Avenue Chicago IL 60619 272
26 Adam Avenue Adam South Escanaba Avenue Chicago IL 60620 272
32 Adam Avenue West South California Avenue Chicago IL 60655 272
如何修改查询以获得与上述结果类似的结果。
谢谢, 桑沙
答案 0 :(得分:0)
你需要在这里使用条件ORDER BY:
DECLARE @SearchString VARCHAR(200)
SET @SearchString = 'Adam OR West OR 60608'
SELECT Id, First_Name, Last_Name, Address,City,State,Zip, Rank
FROM Patient_Ex PAT
INNER JOIN CONTAINSTABLE(Patient_Ex,*, @SearchString) CT
ON PAT.Id = CT.[Key]
ORDER BY
CASE WHEN (Last_Name='Adam' AND Address like '%West%' AND Zip = '60608') THEN 0 ELSE 1 END,
CT.Rank DESC
上述查询将放置Last_Name = Adam的记录,地址包含结果集顶部的“West”和Zip = 60608。其余记录将按照CONTAINSTABLE返回的全文搜索排序排序,排名最高的记录位于顶部,但恰好在符合上述3个标准的记录之后。
您说您不知道要搜索哪些列。看看你是否可以使用上面的代码片段作为创建动态SQL的基础,动态SQL将在特定搜索案例中使用的列上运行。
HTH