こんな問い合わせがあります
SELECT * from table1 where
CONTAINS(column,'key1 OR key2 OR key3')
ここで、その行にあるキー (key1、key2、key3) の数 (1、2、または 3) を含む別の列を追加したいと思います。どうすればよいですか? 一致するキーの数を取得したら、独自のランキング関数を作成するため、「containstable」または freetexttable を使用したくありません。
こんな問い合わせがあります
SELECT * from table1 where
CONTAINS(column,'key1 OR key2 OR key3')
ここで、その行にあるキー (key1、key2、key3) の数 (1、2、または 3) を含む別の列を追加したいと思います。どうすればよいですか? 一致するキーの数を取得したら、独自のランキング関数を作成するため、「containstable」または freetexttable を使用したくありません。
簡単に一致するキーの数を取得できます。
select *,
case when Contains( Column, 'key1' ) then 1 else 0 end +
case when Contains( Column, 'key2' ) then 1 else 0 end +
case when Contains( Column, 'key3' ) then 1 else 0 end as [NumberOfMatchingKeys]
from Table1
where Contains( column, 'key1 OR key2 OR key3' )
少なくとも簡単に取得できないのは、特定のキーの一致数です。key2が 7 回一致したことが問題です。
考えられる最適化は、句Contains
から theを削除することです。where
select * from (
select *,
case when Contains( Column, 'key1' ) then 1 else 0 end +
case when Contains( Column, 'key2' ) then 1 else 0 end +
case when Contains( Column, 'key3' ) then 1 else 0 end as [NumberOfMatchingKeys]
from Table1 ) as Louise
where NumberOfMatchingKeys > 0