You can get the number of keys that match easily enough:
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' )
What you can't get, at least easily, is the number of matches for any given key. Finding out that key2 matched 7 times is a problem.
A possible optimization is to remove the Contains
from the where
clause:
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