【问题标题】:Can you do a sub select within a Case statement您可以在 Case 语句中进行子选择吗
【发布时间】:2015-07-30 02:09:26
【问题描述】:

可能是一些非常微不足道的事情,但我还没有在互联网上找到我正在寻找的答案,并且我得到了语法错误。我想要/需要做的是在我的 where 子句中提供一个特殊情况,其中 doctype 是 1。如果是,那么它需要匹配来自临时表的子选择的 claimID。如果 doctype 不是 1,那么我们只需要继续并忽略 select。

AND 
            CASE 
                WHEN @DocType = 1 THEN (c.ClaimID IN (SELECT TNE.ClaimID FROM TNE)
            END

我已经看到了一些 for if 语句,但我似乎没有让它起作用,并且到目前为止还没有在网上找到任何表明 case 语句在做我想做的事情。这甚至可能吗?

【问题讨论】:

    标签: tsql case


    【解决方案1】:

    你不需要case语句,你可以这样做:

    AND (@DocType <> 1 or c.ClaimID in (SELECT TNE.ClaimID FROM TNE))
    

    【讨论】:

      【解决方案2】:

      CASE 表达式(不是语句)返回单个值。 SQL Server 支持bit 数据类型。 (有效值为 0、1、'TRUE' 和 'FALSE'。)有一个 boolean 数据类型(具有 TRUE、FALSE 和 UNKNOWN 值),但您无法牢牢把握其中一个。您的 CASE 表达式试图返回一个布尔值,给出或接受不匹配的括号,这在此上下文中不受支持。

      你可以使用这样的东西,尽管 Luc 的回答更适用于所述问题:

      and
        case
          when @DocType = 1 and c.ClaimId in ( select TNE.ClaimId from TNE ) then 1
          when @DocType = 2 and ... then 1
          ...
          else 0
          end = 1
      

      请注意,CASE 返回的值必须随后进行比较 (= 1)。

      【讨论】:

        猜你喜欢
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-23
        • 1970-01-01
        • 2018-01-30
        相关资源
        最近更新 更多