【问题标题】:How do I use a multi-value parameter with a CASE expression in SSRS?如何在 SSRS 中使用带有 CASE 表达式的多值参数?
【发布时间】:2019-04-06 04:28:13
【问题描述】:

我正在尝试使用 case 表达式来标记哪些记录具有我的参数中列出的任何 ID。我的代码是这样的:

SELECT 
TRANSACTION_ID,
CASE WHEN CUSTOMER_ID IN (@PARAMETER) THEN 1 ELSE 0 END AS CUSTOMER_CLASS

如果我在请求参数时只使用一个值,它会正常工作,但如果我输入多个值,我会得到:在预期条件的上下文中指定的非布尔类型的表达式,靠近 ',' .

我尝试了几种方法,包括将参数视为逗号分隔的字符串并尝试解析子字符串。我无法弄清楚参数是如何传递的,但我一直遇到问题。

我束手无策。谁能指出我正确的方向?

【问题讨论】:

  • 是@PARAMETER 在您的查询中声明还是来自SSRS?你在其他地方使用@参数吗? SSRS 应该处理多个值的解析,因此它应该工作。
  • 正如汉诺威所说,这应该有效。 SQL sn-p 是直接来自数据集查询还是调用存储过程?如果它是一个存储过程,您的代码将无法工作,但如果查询直接在您的数据集查询中,那么它应该可以正常工作。

标签: sql reporting-services parameter-passing case multivalue


【解决方案1】:
case when [ReturnedBy] IN (SELECT Split FROM [dbo].[ufn_Split](@param_1, ',')) then 1 else 0 end

【讨论】:

  • 你能补充一些关于这个 sn-p 做什么的上下文吗?
  • Select Col_1 = case when [ReturnedBy] IN (SELECT Split FROM [dbo].[ufn_Split](@param_1, ',')) then 1 else 0 end from table_1 由于上面建议他/她已经有了拆分功能。我们一直在我们的 ssrs / sql procs 上使用它。任何错误都可以限制为函数而不是函数调用。
  • 如果您要为答案添加更多上下文,请不要使用评论,只编辑答案,这样对未来的访问者更有用。
【解决方案2】:

根据您的要求,您应该选择动态查询。 下面的代码运行完美。

        Declare  @sql varchar(max), 
                 @PARAMETER varchar(100) = '1,2,3,4' //For ex
        set @sql = 
            'SELECT 
            TRANSACTION_ID,
            CASE WHEN CUSTOMER_ID IN ('+@PARAMETER+') THEN 1 ELSE 0 END AS CUSTOMER_CLASS'; 
Execute(@sql)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多