使用多个 case 语句时分区的顺序子句出错
Error in order clause of partition by when using multiple case statement
我想在 partition by 语句中的 order by 子句中使用多个 case 语句。
我有很多专栏,所以我只发布所需的专栏。
我有 table 位客户:
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 语句,那么我与其他 table 的连接和查询工作 fine.So,连接语句或任何其他 logic.The 问题都没有问题我得到的是当我使用多个 case statement.I 认为我的语法是 mistake.Please 告诉我如何解决这个 error.I 需要这个 case 语句逻辑作为强制性的。
您需要先关闭第二个 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)
我想在 partition by 语句中的 order by 子句中使用多个 case 语句。 我有很多专栏,所以我只发布所需的专栏。
我有 table 位客户:
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 语句,那么我与其他 table 的连接和查询工作 fine.So,连接语句或任何其他 logic.The 问题都没有问题我得到的是当我使用多个 case statement.I 认为我的语法是 mistake.Please 告诉我如何解决这个 error.I 需要这个 case 语句逻辑作为强制性的。
您需要先关闭第二个 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)