問題
SQL Serverでストアドプロシージャを作成して、最も一致するレコードを見つけようとしています。テーブルの5つの列A、B、C、D、およびEに対応する5つの入力パラメーター@ A、@ B、@ C、@ D、および@E(すべてvarchar50)が与えられた場合、最も一致する列で記録します。選択したレコードで一致しない各列には、スペース''が含まれている必要があります。
たとえば、「Sony」、「PlayStation」、「Controller」、「Black」、「Damaged」という入力があり、テーブルに次の列が含まれている場合:
"Sony" "Playstation" "Unit" "Black" "Damaged"
"Sony" "Playstation" " " " " " "
2つのパラメーターが一致し、一致しない3つのパラメーターにはスペースがあるため、2番目の行を返す必要があります。4つのパラメーターが一致していても、真ん中のパラメーターが一致せず、スペースではないため、最初の行を返したくありません。スペースだったら、最初の列が勝者だったでしょう。
私のアプローチ
明らかにできないさまざまな詳細がありますが、私の基本的なアプローチ(私はSQL初心者であることに注意してください)は、MOST固有からLEAST固有までのすべての組み合わせをテストすることでした。したがって、私のクエリは次のようになります。
-- start with most specific
SELECT * FROM dbo.Items WHERE
A = @A
B = @B
C = @C
D = @D
E = @E
-- if no matches, try next
IF @@ROWCOUNT = 0
SELECT * FROM dbo.Items WHERE
A = @A
B = @B
C = SPACE(1)
D = @D
E = @E
... etc.
私の場合、順列の一部は存在しないため、実際にテストする必要があるのは16の構成だけです。それでも、これは私が望むことを達成するための非常に非効率的な方法のようです。その上、それも機能していません。自動トリミングが行われているため、スペースとの比較には問題があるようです。いずれにせよ、私の現在のアプローチは非効率的で機能しないようです-それで私はあなたに助けを求めます。