1

テキスト フィールド パラメータで数値範囲とカンマ区切りの値を受け入れる必要があるレポートがあります。パラメータは「アカウント タイプ」用で、「1,2,5-9」を入力できるようにする必要があり、1,2,5,6,7,8,9 の整数値を取ります。単一の値でこれを行う方法は知っていますが、範囲では決してしません。

単一の値に使用するサンプル コードは次のとおりです。

    SELECT
      arcu.vwARCUAccount.AccountType
      ,arcu.vwARCUAccount.ACCOUNTNUMBER
    FROM
      arcu.vwARCUAccount
    WHERE
      arcu.vwARCUAccount.AccountType = @AccountType

どの情報も非常に役立ちます。私のチームの誰かがすでにそれを見積もっており、彼らが範囲を望んでいることに気づかずにそれを行うことができると言ったので、今私はそれを理解するのに行き詰まっています. ここにいる全員が私の立場にいるに違いないので、事前に感謝します。

4

3 に答える 3

1

やりたいことがいくつかあります。

A. データ型が「整数」のパラメータを設定し、「複数の値を許可する」チェックボックスを選択していることを確認してください。その値を「Ints」に設定します。とりあえずOK。

これは基本的に、複数のデータセットを渡すことができるデータ型の型に対して定義するデータセットの使用可能な配列リストを設定します。

B.「値」と呼ばれる単純なデータセットを作成する

    declare @Ints table ( id int);

    insert into @Ints values (1),(2),(5),(6),(7),(8),(9)

C. ステップ 1 の変数に戻り、そのプロパティを開きます。サイド ペインで [使用可能な値] を選択します。[クエリから値を取得] ラジオ ボタンを選択します。データセットを「値」としてリストし、値とラベルを「id」としてリストします。

パラメータ配列を指定した値にバインドしました。ただし、ユーザーはこれらの 1 つまたはすべてを選択する必要はなく、1 つまたは複数を選択する必要があります。

D. メイン データセットを設定する必要があります (ここに来る前に既に行っていると思います)。私の例の目的のために、単純なものを作成します。person というデータセットを作成します。

    declare @Table Table ( personID int identity, person varchar(8));

    insert into @Table values ('Brett'),('Brett'),('Brett'),('John'),('John'),('Peter');

    Select *
    from @Table
    where PersonID in (@Ints)

重要な部分は、以下を示す述語です。

'where PersonID in (@Ints)'

これにより、この配列パラメーターで値を選択するのはユーザーに依存していることをデータセットに伝えます。

于 2013-01-08T20:43:31.427 に答える
0

私は tsql に完全に精通しているわけではありませんが、reg 式の使用についてはどうですか?

「 LIKE (Transact-SQL)」を参照

そのような:

arcu.vwARCUAccount.AccountType like '[' + replace(@AccountType, ',','') + ']'
于 2013-01-08T10:04:33.350 に答える
0

これはうまくいくかもしれません。ブロードブラシとして試してください:

  1. tsql からアカウント タイプのフィルターを削除します。

  2. 数値 (アカウントの種類) を入力し、それがユーザーによって指定されたパラメーター文字列に含まれているかどうかをテストし、1 または 0 を出力する vb 関数を作成します。 vb関数

    Function test(byval myin as integer, byval mylimits as string) as integer
    'results as 1 or 0

      dim mysplit as string()= Split(mylimits, ",")
      dim mysplit2 as string(1)

      'look through all separated by a ","
      For Each s As String In mysplit 

        'does there exists a range, i.e. "-"? 
        if s like "%-%" then
          mysplit2 = split(s, "-")

          'is the value between this range?
          if myin >= mysplit(0) andalso myin <= mysplit(1) then 
            return 1
          end if

        'is the value equal to the number?
        elseif s = myin then
          return 1

        end if
      Next s

      return 0

    End

3. アカウント タイプが 1 の入力として vb 関数を使用して、データセットにフィルターを作成します。

    =code.test(Fields!AccountType.Value, Paramaters!MyPar.Value)
于 2013-01-09T08:33:50.807 に答える