0

私は過去にこのフォーラムからかけがえのない助けを得ました - 多くの感謝! 新しい問題についてもう少し助けていただければ幸いです。

以下は、5 つのフィールド (ID、F1 ~ F4) で構成されるテーブルの一部です。テーブルは、数千のレコードを下方向に拡張します。

Table1 
ID   F1  F2   F3    F4

1    A    B    1    2
2    A         2    4
3    D    C    8    
4    F    E    4    6
5         B         2
6    D    F    3    
7    B    B         3
8    N    L    1    9
9    A    A    0    7

いくつかのルール: 列 F1 と F2 のエントリは、どちらのフィールドにも存在できることに注意してください。F3 と F4 についても同様です。F1 と F2 のエントリが F3 と F4 に存在することはありません。F1 または F2 に 1 つの Null エントリが存在する可能性があります。単一の Null エントリは、F3 または F4 にも存在する可能性があります。ただし、F1 と F2 (および/または) F3 と F4 の両方に Null が存在することはありません。

初期の問題 (解決済み):

このテーブルを検索して、次のようなユーザー入力の検索フレーズの順列を含む一致を探したいと思います。

F1    F2    F3    F4 
A     B     1     2

次のような条件付き構造は、F1/F2 と F3/F4 Null の間の順列を許可することでこれを実現します。

"WHERE (F1 In ('A','B') OR F1 Is Null) AND (F2 In ('A','B') OR F2 Is Null)

AND (F3 In (1,2) OR F3 Is Null) AND (F4 In (1,2) OR F4 Is Null)"

VBA は、ユーザーの検索フレーズに基づいて "In (..)" ステートメントを作成するために使用されます。上記の場合、レコード セットにはレコード 1 と 5 が含まれます (レコード 5 は検索フレーズのエントリを含まないため許可されますが、Null が含まれる可能性があります)。

新しい問題 (未解決 - 私はこれについて少し苦労しています):

追加機能として、エンド ユーザーに大きな利益をもたらすために、検索フレーズに最も近いレコード (4/4 一致) を最も遠いレコード (0/4 一致) に並べて表示したいと思います。

ID    F1    F2    F3    F4    Matches

1     A     B     1     2      4
5           B           2      4
2     A           2     4      2
7     B     B           3      2
9     A     A     0     7      2
5           B           7      1
8     N     L     1     9      1
3     D     C     8            0
4     F     E     4     6      0
6     D     F     3            0

検索フレーズと検索テーブルの間で受け入れ可能な一致の数を表示する新しいフィールド Matches に注意してください。Null は一致にカウントされることに注意してください。また、検索フレーズのエントリを複製して、許容可能な一致 (レコード 7 と 9 の F1 フィールドと F2 フィールド) にカウントできることにも注意してください。

SQLでこれを比較的簡単に行うことは可能ですか?

前もって感謝します。

4

1 に答える 1

2

基本的な概要は次のとおりです。

SELECT F1, F2, F3, F4, (IIF function statements here) AS Matches 
FROM Table1 ORDER BY (repeat the IIF statements here) DESC;

残念ながら、Access では ORDER BY 句でフィールド エイリアスを使用できないため、IIF ステートメントを繰り返す必要があります。

IIF は次のようになります。

IIF(F1='A',1,0) + IIF(..)

ただし、いくつかの IIF をネストする必要があります。

于 2013-07-27T20:46:14.633 に答える