-3

私は以前にこの質問をしましたが、それに対する解決策はありません。次のデータセットで複数値フィルターを作成しました。

SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, COMPANY_M,  CONSECUTIVE_D 
FROM TEMP_TARGET
WHERE (CONSECUTIVE_D >= @consecDays) AND (ENTRY_DT BETWEEN @startDate AND @endDate)               AND
(ACCESS_LOCATION_X LIKE @accessVar) AND
(IC_N LIKE @icVAr)  

accessVarmy の値にワイルドカードを使用しない場合は比較的簡単ですが、それが必要でした。したがって、 には 5 つの値が可能ですaccessVar

%(means all), 'At%', 'Bet%', 'Co%' and 'Dea%'

ワイルドカードで In 演算子を使用できません。次に、この種のドロップダウン フィルターをオプションにすることはできますか? nth が選択されている場合は、すべてを照会します。

他にどのようなオプションがありますか?

4

1 に答える 1

1

LIKE と複数値のパラメーターを一緒に使用したいのですが、うまくいきません。ただし、Reporting Services を使用すると、必要なことはほとんど何でも実行できます。解決策は、カスタム コードと式を使用することです。まず、次のように SQL ステートメントを式に変更します。

="SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, "
&"COMPANY_M, CONSECUTIVE_D "
&"FROM TEMP_TARGET "
&"WHERE (CONSECUTIVE_D >= @consecDays) "
&"AND (ENTRY_DT BETWEEN @startDate AND @endDate) "
&"AND ((@accessvar IS NULL) OR (ACCESS_LOCATION_X LIKE @accessVar)) "
&"AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr)) "

したがって、SQL ステートメントは実際には、実行される SQL 式に評価される文字列式です。

LIKE次に、カスタム コードを使用して、複数値パラメーターを一連のステートメントに変換する必要があります。次のカスタム コードをレポートに追加します (レポートを右クリックし、[プロパティ] を選択して [コード] タブをクリックします)。

Function AccessLocations (ByVal parameter As Parameter) AS String
  Dim Result As String
  If parameter.IsMultiValue then
    Result = "AND ( " 
    For i as integer = 0 to parameter.Count-1 
      Result = Result + "(ACCESS_LOCATION LIKE '" + CStr(parameter.Value(i)) + "') OR "  
    Next 
    Result = Left(Result, Result.Length - 3) +") "
  Else 
    Result = "AND (ACCESS_LOCATION LIKE '" + CStr(parameter.Value) + "') "
  End If 

  Return Result
End Function

次に、この関数を SQL ステートメントの一部として呼び出します。

Code.AccessLocations(Parameters!accessvar)

したがって、完全な SQL は次のとおりです。

="SELECT PASS_M, ENTRY_DT, EXIT_DT, WORKED_HRS, ACCESS_LOCATION_X, IC_N, "
&"COMPANY_M, CONSECUTIVE_D "
&"FROM TEMP_TARGET "
&"WHERE (CONSECUTIVE_D >= @consecDays) "
&"AND (ENTRY_DT BETWEEN @startDate AND @endDate) "
& Code.AccessLocations(Parameters!accessvar)
&"AND ((@icVar IS NULL) OR (IC_N LIKE @icVAr)) "

パラメータに%ワイルドカードが含まれている場合、これは機能します。それ以外の場合は、ワイルドカードを関数に追加します。

于 2012-12-17T01:31:54.307 に答える