2016-12-20 2 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 

그러나 결과는 다음과 같습니다. 같은 행에 일치하는 세 검색 기준이 모두있는 경우 맨 위에 표시하고 싶습니다. 이 시나리오에서는 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

당신은 여기에 의해 조건 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