【问题标题】:Nested Case Statement - Pulling the wrong value嵌套案例语句 - 提取错误的值
【发布时间】:2020-06-10 21:22:07
【问题描述】:

这是我的语法/问题

,CASE   WHEN nullif(ltrim(A),'') IS NOT NULL OR nullif(ltrim(B),'') IS NOT NULL THEN NULL                                                                                       
        WHEN nullif(ltrim(C),'') IS NOT NULL        THEN (
                                                        CASE    WHEN nullif(MM,'') IS NOT NULL THEN MM
                                                                WHEN NN IS NOT NULL THEN XX                                                     
                                                                WHEN NN IS NULL THEN concat(UPPER(YY), ' ', UPPER(XX))      
                                                                END
                                                        )
        WHEN nullif(ltrim(D),'') IS NOT NULL OR nullif(ltrim(E),'') IS NOT NULL THEN concat(UPPER(XX), ' ', UPPER(YY))          
        ELSE ' '
        END as 'Data_Item'

我们有一系列陈述要评估。 如果字段A OR B 不为空,那么我们拉NULL

如果字段C 不为空,那么我们评估一个嵌套的case 语句,这就是我的代码出现问题的地方。

如果C 字段不为空,我们应该评估MM 字段,如果MM 不为空,我们应该返回MM(这是我应该得到的,但我没有)。

我们继续评估,如果NN 不为空,我们会拉取XX

如果NN 为空,我们连接YY space XX

最后,如果字段D 不为空或字段E 不为空,那么我们连接字段XX space YY。

否则我们只返回一个空格 然后结束

--

简而言之,它是一个半复杂的系列案例语句,如果第二种情况为真,我们必须评估 3 或 4 个嵌套语句。直到我们发现什么是真的。

无论出于何种原因,我的数据总是返回最后一个语句(D 为真)而不是嵌套的语句。

【问题讨论】:

  • case 是一个表达式 - 不是一个语句 :)
  • when nullif(ltrim(A),'') IS NOT NULL 可以简化为 when A <> '',因为空字符串和空格比较相等。
  • 请发布一些示例数据和预期结果。

标签: sql sql-server nested switch-statement case


【解决方案1】:

这是您的 CASE 简化版:

CASE   
   WHEN A <> '' OR B <> ''
      THEN NULL                                                                                    
   WHEN C <> ''
      THEN CASE    
              WHEN MM <> '' THEN MM
              WHEN NN IS NOT NULL THEN XX                                                     
              WHEN NN IS NULL THEN Concat(Upper(YY), ' ', Upper(XX))     
           END
   WHEN D <> '' OR E <> ''
      THEN Concat(Upper(XX), ' ', Upper(YY))          
   ELSE ' '
END

似乎符合你的逻辑......

【讨论】:

  • 这就是问题所在,如果我的逻辑匹配......为什么我没有得到预期的结果(在少数情况下)。我想不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 2021-11-19
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多