Sql server Oracle数据源的SSRS 2017中的多值参数不起作用

Sql server Oracle数据源的SSRS 2017中的多值参数不起作用,sql-server,oracle,reporting-services,report,ssrs-2012,Sql Server,Oracle,Reporting Services,Report,Ssrs 2012,我正在使用oracle数据源创建SSRS报告。我将多值参数值作为筛选器传递给Oracle数据集。下面是示例查询 select *from FIN.FINANCIAL_TRANSACTION F where TO_DATE(F.CREATE_DATETIME) BETWEEN to_date(:startdate,'YYYY-MM-DD') and to_date(:enddate,'YYYY-MM-DD') AND F.SUBTYPE IN (:subtype) 当我在:subtype参

我正在使用oracle数据源创建SSRS报告。我将多值参数值作为筛选器传递给Oracle数据集。下面是示例查询

select *from FIN.FINANCIAL_TRANSACTION F
 where TO_DATE(F.CREATE_DATETIME) BETWEEN  to_date(:startdate,'YYYY-MM-DD') and  to_date(:enddate,'YYYY-MM-DD')
AND F.SUBTYPE IN (:subtype)
当我在:subtype参数中传递单个值时,此查询工作。当我传递多个值时,我没有得到任何输出。当参数中有多个值时,它将作为逗号分隔的字符串传递。所以我尝试用下面的查询拆分字符串。但在报告处理中出现错误

从FIN.FINANCIAL\u事务F中选择*,其中 TO_DATEF.CREATE_DATETIME介于TO_date之间:startdate,'YYYY-MM-DD' 截止日期:选择中的enddate、'YYYY-MM-DD'和F.SUBTYPE regexp_substrrese:子类型,,'',[^,]+',1,级别为txt 从regexp_子序列的双连接:子类型,,“”, “[^,]+”,1,级别不为空


查询中的问题是替换:子类型“”。 为什么要用双引号替换单引号

Oracle中的值总是用单引号括起来,如下所示-

F.SUBTYPE IN ('val1','val2','val3',.....)  
所以我认为这是你的疑问的唯一问题

对于逗号分隔的多个输入参数,您可以使用分层查询,如下所示:重复查询以提供实际查询:

SELECT
    *
FROM
    FIN.FINANCIAL_TRANSACTION F
WHERE
    TO_DATE(F.CREATE_DATETIME) BETWEEN TO_DATE(:STARTDATE, 'YYYY-MM-DD') 
      AND TO_DATE(:ENDDATE, 'YYYY-MM-DD')
    -- changes after this line (IN clause)
    AND F.SUBTYPE IN (
        SELECT DISTINCT
            TRIM(REGEXP_SUBSTR(:SUBTYPE, '[^,]+', 1, LEVEL)) VALUE
        FROM
            DUAL
        CONNECT BY
            REGEXP_SUBSTR(:SUBTYPE, '[^,]+', 1, LEVEL) IS NOT NULL
    );
这将支持单值和多值命令分离


干杯

Hi-Tejesh我现在能够通过where condition INSTR:subtype,SubtypeName>0中的以下子句传递多值参数。我正试图用下面的代码实现All if null条件,其中INSTR:subtype、subtypename>0或:subtype='All',但总是出现错误。你能帮忙吗?嗨,我尝试了这个方法,但是我得到了一个非法变量名/编号的错误。但是,如果我硬编码日期参数的值,那么它不会给我任何错误,但是在从另一个参数中选择多个值之后,报告数据不会被过滤掉。知道发生了什么吗