以下是我的语法/问题
,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为null,我们将连接YY space XX
最后,如果字段D不为空或字段E不为空,那么我们将连接字段XX space YY。
否则,我们只返回一个空格,然后结束
--
简而言之,这是一个半复杂的序列case语句,如果第二个场景为真,我们必须计算3到4个嵌套语句。直到我们找到真相。
无论出于什么原因,我的数据总是返回最后一条语句(D为true),而不是嵌套的语句。
发布于 2020-06-11 05:55:59
这是你的简化案例:
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似乎符合你的逻辑..。
https://stackoverflow.com/questions/62313348
复制相似问题