【问题标题】:CASE statement with multiple THEN's具有多个 THEN 的 CASE 语句
【发布时间】:2020-06-02 17:59:29
【问题描述】:

我正在使用以下 SQL 来尝试适应输入参数的多个场景。

AND ec.eventId in (CASE WHEN @event = 'test_reeq' THEN 223
                        WHEN @event = 'test_NT' THEN 224
                        WHEN @event = 'Both' then '223,224'
                        WHEN @event = 'All' THEN ec.EventId
                        end
                        )

我的问题似乎在于我尝试使用“两者”输入。 SQL不喜欢逗号,我试过用括号代替单引号,也没有引号,但还是没有运气。有没有可能做我想做的事?

更多信息:EventId 本身是数据库中的整数数据类型。为了方便用户(这最终将是一份 SSRS 报告),我希望可以选择使用关键字“Both”将这两个 ID (223,224) 分组。我知道在 SSRS 中,我可以只进行多选,甚至可以默认选择这两个,但我更愿意将它们组合在一起作为一个选项。

【问题讨论】:

  • 'Both' 是否意味着eventId 必须同时 223 和224?我不认为这是可能的。也许选项名称应该是'Either'?也许您可以显示一些示例数据,并确定选择Both 或All Others 时将返回哪些行。
  • 它只是不能那样工作。在互联网上搜索“case in where”,你会发现很多例子和讨论。请注意,“所有其他人”实际上意味着(正如您编写的那样)一切 - 该逻辑中没有暗示“其他人”。如果这是你想要的,那么你的逻辑需要改变。
  • 'Both' 应该是 223 AND 224,而 'All Others' 的命名不合适,应该只是 'All',我理解是包括 223 和 224 在内的所有内容。
  • 您能否在表格中显示eventId 同时为223 和 224 的一行?或者,它真的意味着 either 223 or 224?
  • 对不起:你让我明白了,我也是这个意思。我没有考虑 SQL 语法。

标签: sql-server reporting-services


【解决方案1】:

一种方法是使用另一个CASE 表达式作为

DECLARE @Var VARCHAR(45) = 'Both';
-- You can change the value of the varible @Var to test for other inputs
SELECT *
FROM
(
  VALUES
  (223),
  (224),
  (1)
) T(Col)
WHERE Col IN (
               CASE @Var
                 WHEN 'test_reeq' THEN 223
                 WHEN 'test_NT' THEN 224
                 WHEN 'Both' THEN 223
                 WHEN 'All Others' THEN Col
               END
             ) OR Col = CASE WHEN @Var = 'Both' THEN 224 END;

您可以乘坐IN()并使用

WHERE Col = CASE @Var
                 WHEN 'test_reeq' THEN 223
                 WHEN 'test_NT' THEN 224
                 WHEN 'Both' THEN 223
                 WHEN 'All Others' THEN Col
               END
              OR Col = CASE WHEN @Var = 'Both' THEN 224 END;

Online Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2011-12-10
    相关资源
    最近更新 更多