使用多个 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)