1

名前のテキストまたは名前の ID でフィルター処理することが確実でない場合があります。これを case 文と で解決しましたisnumeric。たとえば、id と name の両方の値がありますが、どの列をフィルター処理する必要があるかわかりません。rtresource.id数値であり、この場合、処理する値があります'183'。がフィルタリングしようとしている場合rtresource.rname (varchar)、その ID の rname は「Jane Thompson」です。

したがって、フィルターは次のいずれかです

rtresource.id=183

または

rtresource.rname='Jane Thompson'

代わりに

rtresource.rname in (CASE IsNumeric(rtresource.rname) WHEN 1 then '183' else 'Jane Thompson' End) 

これは素晴らしい作品です。問題は、id/rname の複数のセットが渡されることです。通常、どちらかを尋ねますrtresource.id in (183, 23) or rtresource.rname in ('Jane Thompson','John Doe')。これを case ステートメントで解決するにはどうすればよいですか?

rtresource.rname in (CASE IsNumeric(rtresource.rname) WHEN 1 then ('183','23') else ('Jane Thompson','John Doe') End)

上記は、値間のコンマについて不平を言っています。私も試しました:

rtresource.rname in (CASE IsNumeric(rtresource.rname) WHEN 1 then ('183'+','+'23') else ('Jane Thompson'+','+'John Doe') End)

どちらも機能しません。アイデア?事前に助けてくれてありがとう。

4

2 に答える 2

0

理解した。ケースをスキップして、代わりに:

(IsNumeric(rtresource.rname) = 1 および rtresource.rname in ('183','23')) または (IsNumeric(rtresource.rname) != 1 および rtresource.rname in ('Jane Thompson','John Doe') )))

于 2015-10-22T17:26:13.720 に答える
0

caseリスト内のすべての値を繰り返す必要があります。

where rtresource.rname in (
  CASE IsNumeric(rtresource.rname) WHEN 1 then '183' else 'Jane Thompson' End,
  CASE IsNumeric(rtresource.rname) WHEN 1 then '23' else 'John Doe' End
)

または、値が交差しないため、次のようにします。

where rtresource.rname in (183, 23, 'Jane Thompson', 'John Doe')

これは、列のインデックス (存在する場合) を使用するため、パフォーマンスが大幅に向上し、コーディング、理解、スケーリングが容易になります。

于 2015-10-22T17:18:38.140 に答える