0

こんな問い合わせがあります

SELECT * from table1 where 
CONTAINS(column,'key1 OR key2 OR key3')

ここで、その行にあるキー (key1、key2、key3) の数 (1、2、または 3) を含む別の列を追加したいと思います。どうすればよいですか? 一致するキーの数を取得したら、独自のランキング関数を作成するため、「containstable」または freetexttable を使用したくありません。

4

1 に答える 1

1

簡単に一致するキーの数を取得できます。

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
于 2013-05-04T00:32:35.803 に答える