嵌套的案例声明--拉出错误的值。

问题描述 投票:-1回答:1

这是我的语法问题

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

我们有一系列的语句要评估。如果字段 AB 不为空,那么我们就拉出 NULL

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

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

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

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

最后,如果场 D 不为空,或字段 E 不为空,那么我们就将字段连在一起 XX space YY.

否则,我们只需返回一个spacethen结束

--

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

不管什么原因,我的数据总是返回最后一条语句(D为真),而不是嵌套语句。

sql sql-server nested switch-statement case
1个回答
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

似乎符合你的逻辑...

© www.soinside.com 2019 - 2024. All rights reserved.