2012-04-10 1 views
2

私は基準を使って検索する必要があるレコードのセットを持っています。しかし、条件は私に複数の行を返す。SQL Serverのlike演算子を使用して、一致率が他のレコードよりも高いレコードを選択する方法は?

したがって、一致する基準の割合が最大の2つのレコードが必要です。

私はファジーロジックを扱っていましたが、このような単純な問題に対しては複雑すぎることがわかりました。私は以下のようなシナリオを持っています:

SELECT DISTINCT FirstName, LastName, CountryName, StateName FROM Employee 

例えば、上記の1つが私に5レコードを返しています。

私が欲しいのは、 "%Gujarat% 'のようなstatenameを見つけることができる" like "演算子のようなものです。& countrynameのように、上記の5つのレコードと一致する%%India%

この一致率が得られたら、一致率が最も高い上位2つのレコードを選択します。

これにより、いくらか正確なデータが得られます。

SQL Serverを使用しているのですか?

+1

SQLの質問のための答えを得るための最善の方法は、リストすることですサンプルデータセットを作成し、必要な結果のリストとプロセスの説明を表示します。これまでに作業したコードも表示してください。 –

答えて

2

あなたが理解する限り、Fuzzy String Matching using Levenshtein Distance Algorithmのようなものが必要です。リンクが役立つことを願っています。

CountryNameと検索パターンの距離を計算する必要があります。正確には「パーセンテージ」ではありませんが、関連性を測定できます。

これはおそらくあなたの問題を解決しますか?

SELECT TOP 2 FirstName, LastName, CountryName, StateName 
FROM Employee 
WHERE 
    statename like '%Gujarat%' AND countryname like '%India%' 
ORDER BY 
    dbo.edit_distance(statename, 'Gujarat') + dbo.edit_distance(CountryName, 'India') DESC 
+0

ありがとう、これは私を助けるが、ロジックは長く&複雑になります。私は私の質問を更新しましたあなたがもっと....できるかどうか私の要件は非常に簡単です参照してください... –

+0

私はあなたのポイントを得ることができません。いくつかの例を挙げることができますか?一致率をどのように計算するのですか? –

+0

アップデートを確認してください。 –

0

フルテキスト検索を使用できます。 ContainsTableを使用すると、レコードごとにRANKを取得して、検索パターンに一致させる方法を記述することができます。その後、そのランクで結果を注文してからselect top Nを使用して、最良のN件の結果のみを得ることができます。

フルテキスト検索の実装は簡単で、特にあなたのような簡単なクエリが必要な場合は、高速です。

資源:

希望します。

0

だから私は自分のロジック作成し、私のために働いていない解決策を考える

SELECT TOP 2 FirstName, LastName, CountryName, StateName 
FROM Employee 
WHERE 
    statename like '%Gujarat%' AND countryname like '%India%' 
ORDER BY 
    LEN(StateName + CountryName) - LEN(REPLACE(StateName, 'Gujarat', '') + REPLACE(CountryName, 'India', '')) DESC 

・ホープ、このヘルプを...

関連する問題