2016-12-20 12 views
0

検索機能を実装するために全文検索テキストを使用しています。基本的には、検索文字列ですべての列を検索する必要があります。検索文字列は、異なる列の値の組み合わせを持ちます。しかし、私はすべての列を検索しなければならないのか分かりません。 はたとえば、姓、住所に基づいて顧客を見つけるために、フルテキストSQL検索で次のクエリを使用して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 

しかし、結果は次のようになると思います。同じ行に一致する3つの検索基準がすべてある場合は、その行が先頭に表示されます。このシナリオでは、Last nameがAdam、Addressが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 

上記のような結果が得られるようにクエリを変更するにはどうすればよいですか。

おかげで、 Santha

答えて

0

あなたがここBY条件ORDERを使用する必要があります。

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 =アダム、単語 'ウェスト' と郵便番号を含む住所= 60608のレコードを配置します結果セットの上に表示されます。残りのレコードは、CONTAINSTABLEから返された全文検索ランクでソートされます。ランクは、上記の3つの条件を満たすレコードの上に位置するレコードの上位にあります。

あなたは、検索する必要がある列がわからないと言いました。上記のコードスニペットを、特定の検索ケースで使用される列で動作する動的SQLの作成の基礎として使用できるかどうかを確認してください。

HTH

関連する問題