这是我的语法问题
,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
或 B
不为空,那么我们就拉出 NULL
如果场 C
不为空,那么我们就评估一个嵌套的case语句,这就是我的代码有问题的地方。
如果字段 C
不为空,我们应该评估字段 MM
如果 MM
不是空的,我们应该返回 MM
这是我应该得到的,但我没有)。
我们继续评估,如果 NN
不为空,我们拉出 XX
如果 NN
是空的,我们连接 YY space XX
最后,如果场 D
不为空,或字段 E
不为空,那么我们就将字段连在一起 XX space YY
.
否则,我们只需返回一个spacethen结束
--
简而言之,它是一个半复杂的系列案例语句,如果第二种情况为真,我们要评估像3或4个嵌套语句。直到我们找到什么是真。
不管什么原因,我的数据总是返回最后一条语句(D为真),而不是嵌套语句。
这是你的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
似乎符合你的逻辑...