1

私はSql ServerのSSRSに非常に慣れていません。2008 を使用しています。私の仕事では、このツールを使用していくつかのレガシー レポートを再現するように依頼されました。パラメーターのドロップダウンを作成するところまで行ったところ、DB2 では複数のパラメーターがサポートされていないというエラーに遭遇しました。PeopleSoft テーブルを使用します。私の仕事は今言った、回避策を見つけてください。私は多くのフォーラムを読んでいますが、何も始めることができません。このレポートでユーザーが複数のパラメーターを選択できるようにするために必要なリソースを提供したり、手順を説明したりできますか?

SELECT AL1.EMPLID, AL1.NAME,
       AL4.COVERAGE_ELECT, AL4.FLAT_AMOUNT,
       AL1.JOBTITLE, AL1.JOB_FAMILY,
       AL3.ANNUAL_RT, AL3.ANNL_BENEF_BASE_RT,
       AL4.BENEFIT_PLAN
FROM TABLEONE AL1,
     TABLETWO AL2,
     TABLETHREE AL3,
     TABLEFOUR AL4
WHERE (AL1.EMPLID = AL3.EMPLID
       AND AL1.EMPL_RCD = AL3.EMPL_RCD
       AND AL1.EMPLID = AL2.EMPLID
       AND AL1.EMPL_RCD = AL2.EMPL_RCD
       AND AL1.EMPLID = AL4.EMPLID
       AND AL1.EMPL_RCD = AL4.EMPL_RCD)
       AND (AL2.EFFDT = (SELECT MAX(LF.effdt)
                         FROM TABLETWO LF
                         WHERE LF.emplid = al2.emplid
                               AND LF.empl_rcd = al2.empl_rcd
                               AND LF.plan_type = al2.plan_type
                               AND LF.benefit_nbr = al2.benefit_nbr
                               AND LF.effdt <= CURRENT Date)
            AND AL2.PLAN_TYPE = '20'
            AND AL2.COVERAGE_ELECT = 'E'
            AND AL3.EFFDT = (SELECT MAX(J.EFFDT)
                             FROM TABLETHREE J
                             WHERE J.EMPLID = AL3.EMPLID
                                   AND J.EMPL_RCD = AL3.EMPL_RCD
                                   AND J.EFFDT <= CURRENT Date)
            AND AL3.EFFSEQ = (SELECT MAX(ES.EFFSEQ)
                              FROM TABLETHREE ES
                              WHERE ES.EMPLID = AL3.EMPLID
                                    AND ES.EMPL_RCD = AL3.EMPL_RCD
                                    AND ES.EFFDT = AL3.EFFDT)
            AND AL4.EFFDT = (SELECT MAX(L.EFFDT)
                             FROM TABLETWO L
                             WHERE L.EMPLID = AL4.EMPLID
                                   AND L.EMPL_RCD = AL4.EMPL_RCD
                                   AND L.PLAN_TYPE = AL4.PLAN_TYPE
                                   AND L.BENEFIT_NBR = AL4.BENEFIT_NBR
                                   AND L.EFFDT <= CURRENT Date)
            AND AL4.PLAN_TYPE IN (?)
            AND AL4.COVERAGE_ELECT= ?)
4

3 に答える 3

1

すべてのパラメータに複数の疑問符を使用してください。各疑問符をパラメーターに一致させ、正しい順序で一致させてください。他のいくつかのレガシー DB (Ingres DB など) と同様に、IBM DB2 はクエリで名前付きパラメーターをサポートしていないため、すべてのパラメーターに [?] を使用します。残りの手順は、他のレポート デザインと同じです。

レポートに使用しているドライバーにも依存すると思います。これは、DB2 レポートに使用しているドライバーです。これは、Quest Inc. の TOAD Analyze から来ています。

IBM DB2 ODBC ドライバー - TACOM27

これはあなたのクエリです:

select * from tableA

ここで、field1 = ?

および field2 = ?

これらはあなたのパラメータです:

? = [@p​​ara1]

? = [@p​​ara2]

于 2013-04-08T02:54:10.060 に答える
1

これは、複数のパラメーターを使用して回避策を取得する方法に関するリンクです。あなたがしたことについてもう少し投稿するのに役立たない場合は、答えが見つかります.数週間前に同様の問題に取り組みました. リンクは次のとおりです

基本的に私がしたこと: 1. dataSource に接続しました。次に、DataSet をセットアップします。データセットでは、指定した select ステートメントを入力できます。または、ストアド プロシージャを使用している場合は、そのオプションを選択することもできます。VS には、Parameters という名前のフォルダーがあります。そこに両方の​​パラメータを追加できます。見えるように設定します。ユーザーが何も選択しない場合に備えて、null 値と空白値を許可しました。ドロップダウンに値を指定しました。そして、それはすべて作成側です。これで、データ セットに戻って行を追加できます。

WHERE column = + @DropdownParameter +
AND column2 = +@Dropdown2Parameter +

あなたが興味を持っていたコードの一部を書いているだけです。私はそれをテストしませんでしたが、これは私のプロジェクトで行った方法と似ており、そこで動作します。

FROM TABLETWO
        WHERE PLAN_TYPE = +@DropdownParameter+
              AND EFFDT <= CURRENT_DATE
        GROUP BY EMPLID, EMPL_RCD, BENEFIT_NBR, PLAN_TYPE) INC
    ON T4.EMPLID = INC.EMPLID
       AND T4.EMPL_RCD = INC.EMPLRCD
       AND T4.BENEFIT_NBR = INC.BENEFIT_NBR
       AND T4.PLAN_TYPE = INC.PLAN_TYPE
       AND T4.EFFDT = INC.EFFDT
  WHERE T4.COVERAGE_ELECT = +@DropdownParameter2+) AL4
ON AL4.EMPLID = AL1.EMPLID
 AND AL4.EMPL_RCD = AL1.EMPL_RCD
于 2013-03-26T13:53:12.530 に答える
1

...うわー、それはいくつかのクエリです。これは問題とは関係ありませんが、クエリ自体をクリーンアップする必要があります。特に、結合は常に明示的に指定してください。コンマ区切りFROM句は使用しないでください。

これは少しうまくいくかもしれません:

SELECT AL1.EMPLID, AL1.NAME,
       AL4.COVERAGE_ELECT, AL4.FLAT_AMOUNT,
       AL1.JOBTITLE, AL1.JOB_FAMILY,
       AL3.ANNUAL_RT, AL3.ANNL_BENEF_BASE_RT,
       AL4.BENEFIT_PLAN
FROM TABLEONE AL1,
JOIN (SELECT DISTINCT EMPLID, EMPL_RCD
      FROM TABLETWO 
      WHERE PLAN_TYPE = '20'
            AND COVERAGE_ELECT = 'E'
            AND EFFDT <= CURRENT_DATE) AL2
  ON AL2.EMPLID = AL1.EMPLID
     AND AL2.EMPL_RCD = AL1.EMPL_RCD
JOIN (SELECT T3.EMPLID, T3.EMPL_RCD, T3.ANNUAL_RT, T3.ANNL_BENEF_BASE_RT
      FROM TABLETHREE T3
      JOIN (SELECT a.EMPLID, a.EMPL_RCD, a.EFFDT, MAX(EFFSEQ) EFFSEQ
            FROM (SELECT EMPLID, EMPL_RCD, MAX(EFFDT) EFFDT
                  FROM TABLETHREE 
                  GROUP BY EMPLID, EMPL_RCD) a
            JOIN TABLETHREE z
              ON z.EMPLID = a.EMPID
                 AND z.EMPL_RCD = a.EMPL_RCD
                 AND z.EFFDT = a.EFFDT
            GROUP BY a.EMPLID, a.EMPL_RCD, a.EFFDT) INC
        ON INC.EMPLID = T3.EMPLID
           AND INC.EMPL_RCD = T3.EMPL_RCD
           AND INC.EFFDT = T3.EFFDT
           AND INC.EFFSEQ = T3.EFFSEQ) AL3
  ON AL3.EMPLID = AL.EMPLID
     AND AL3.EMPL_RCD = AL1.EMPL_RCD
JOIN (SELECT T4.EMPLID, T4.EMPL_RCD, 
             T4.COVERAGE_ELECT, T4.FLAT_AMOUNT, T4.BENEFIT_PLAN
      FROM TABLEFOUR T4
      JOIN (SELECT EMPLID, EMPL_RCD, BENEFIT_NBR, PLAN_TYPE, MAX(EFFDT) EFFDT
            FROM TABLETWO
            WHERE PLAN_TYPE IN (?)
                  AND EFFDT <= CURRENT_DATE
            GROUP BY EMPLID, EMPL_RCD, BENEFIT_NBR, PLAN_TYPE) INC
        ON T4.EMPLID = INC.EMPLID
           AND T4.EMPL_RCD = INC.EMPLRCD
           AND T4.BENEFIT_NBR = INC.BENEFIT_NBR
           AND T4.PLAN_TYPE = INC.PLAN_TYPE
           AND T4.EFFDT = INC.EFFDT
      WHERE T4.COVERAGE_ELECT = ?) AL4
  ON AL4.EMPLID = AL1.EMPLID
     AND AL4.EMPL_RCD = AL1.EMPL_RCD

(未テスト - データ レイアウトを知らなければ、やや難しいです。より多くの情報が利用可能である場合は、さらに単純化できる可能性があります。特に、TABLETHREE.EFFSEQが常に増加している場合、または少なくとも ごとEFFDTに、そのセクションを 1 つの参照に折りたたむことができます)

于 2013-03-26T21:36:14.623 に答える