1

我对 SSRS for Sql Server 非常陌生。使用 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

对所有参数使用多个问号。确保将每个问号与参数匹配,并以正确的顺序匹配它们。与其他一些遗留数据库(例如 Ingres DB)一样,IBM DB2 不支持查询中的命名参数,因此,对所有参数使用 [?]。其余步骤与您的其他报表设计相同。

我认为这还取决于您用于报告的驱动程序。这是我用于 DB2 报告的驱动程序。它来自 Quest Inc. 的 TOAD 分析。

IBM DB2 ODBC 驱动程序 - TACOM27

这是您的查询:

从表 A 中选择 *

其中字段1 =?

和字段2 =?

这些是您的参数:

? = [@p​​ara1]

? = [@p​​ara2]

于 2013-04-08T02:54:10.060 回答
1

这是一个关于如何使用多个参数获得解决方法的链接,如果不能帮助您发布更多关于您所做的事情,我们会找到答案,几周前我曾处理过类似的问题。这是链接:http ://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/MS-SQL_Reporting/A_8737-SSRS-can-be-also-used-for-user-inputs.html

基本上我做了什么: 1. 我连接到一个数据源。然后我设置了我的数据集。在数据集中,您可以输入您提供的选择语句,或者如果您使用的是存储过程,您也可以选择该选项。在 VS 中有一个名为 Parameters 的文件夹。您可以在此处添加两个参数。将其设置为可见。如果用户什么都不选择,我允许空值和空白值。我为下拉列表指定了值。这就是创作方面的全部内容。现在您可以返回数据集并添加一行:

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,该部分可以折叠为一个参考)

于 2013-03-26T21:36:14.623 回答