使用多 case 语句时分区顺序子句出错
Posted
技术标签:
【中文标题】使用多 case 语句时分区顺序子句出错【英文标题】:Error in order clause of partition by when using multiple case statement 【发布时间】:2020-04-09 10:41:54 【问题描述】:我想在 partition by 语句中的 order by 子句中使用多个 case 语句。 我有很多专栏,所以我只发布所需的一个。
我的餐桌顾客有:
Select
name,
ROW_NUMBER() OVER(PARTITON BY lastname, rollno
ORDER BY
CASE
WHEN
NVL(gender, address) IS NULL
then
a.effdate desc
else
CASE
WHEN
NVL(a.postoffc, a.mon) <= file.effdate
then
file.effdate
else
a.postoffc
END
desc, NVL(l4.covcode, a.pass)
end
)
rn
from
customers a;
如果,我删除了这些 case 语句,那么我与其他表的连接和查询工作正常。所以,连接语句或任何其他逻辑没有问题。我遇到的问题是当我使用多个 case 语句时。我认为我的语法是错误的。请告诉我如何解决这个错误。我需要这个case语句逻辑作为强制性的。
【问题讨论】:
【参考方案1】:您需要在声明其他排序标准之前关闭第二个CASE
块。此外,您在表达式中有一个不需要的DESC
,应该将其放在之后。
ORDER BY
CASE
WHEN NVL(gender, address) IS NULL THEN a.effdate
ELSE CASE
WHEN NVL(a.postoffc, a.mon) <= file.effdate THEN file.effdate
ELSE a.postoffc
END
END desc, --> here
NVL(l4.covcode, a.pass)
但总的来说,我认为您不需要嵌套 case
表达式。这应该同样有效,并且更容易理解:
ORDER BY
CASE
WHEN NVL(gender, address) IS NULL THEN a.effdate
WHEN NVL(a.postoffc, a.mon) <= file.effdate THEN file.effdate
ELSE a.postoffc
END desc,
NVL(l4.covcode, a.pass)
【讨论】:
这里需要澄清一下条件NVL(gender, address) IS NULL
是否被检查为对分区下的每一行有效,或者任何满足此条件的行都会使其有效?以上是关于使用多 case 语句时分区顺序子句出错的主要内容,如果未能解决你的问题,请参考以下文章