嵌套case语句-拉错值

xienkqul  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(400)

这是我的语法/问题

,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'

我们有一系列的陈述需要评估。if字段 A 或者 B 不是空的那我们就拉 NULL if字段 C 如果不为null,那么我们计算一个嵌套的case语句,这就是我的代码有问题的地方。
if字段 C 不为空,我们应该计算字段 MM 如果 MM 不是空的我们应该返回 MM (这是我应该得到的,但我没有)。
我们继续评估,如果 NN 我们拉的不是空的 XX 如果 NN 我们连接的是null吗 YY space XX 最后是if字段 D 不是null或字段 E 如果不为null,则将字段串联起来 XX space YY .
否则我们只返回一个空格然后结束

简言之,这是一个半复杂的系列case语句,如果第二个场景是真的,我们必须像3或4个嵌套语句那样进行计算。直到我们找到真相。
不管出于什么原因,我的数据总是返回最后一条语句(d为真),而不是嵌套语句。

9w11ddsr

9w11ddsr1#

这是您的案例:

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

似乎符合你的逻辑。。。

相关问题