小编典典

Oracle SQL排序方式与case语句

sql

我在理解带有case语句的oracle(12c)sql order by子句时遇到困难。我有一张包含以下数据的表格,

SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOGIC;

DEPT_NO DEPT_NAME          
---------- --------------------
     1 FINANCE             
     2 ACCOUNT             
     3 HUMAN RESOURCE      
     4 AUDIT               
     5 TRAINING

我正在执行以下sql查询,以便在oracle sql开发人员中为此表添加自定义订单。

SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOGIC ORDER BY (
CASE DEPT_NAME
WHEN 'ACCOUNT' THEN '1'
WHEN 'AUDIT' THEN '2'
WHEN 'FINANCE' THEN '3'
ELSE '4' END
)DESC;

这给出了以下结果:

DEPT_NO DEPT_NAME          
---------- --------------------
     3 HUMAN RESOURCE      
     5 TRAINING            
     1 FINANCE             
     4 AUDIT               
     2 ACCOUNT

但我希望结果应该是

DEPT_NO DEPT_NAME          
---------- --------------------
     5 TRAINING            
     3 HUMAN RESOURCE      
     1 FINANCE             
     4 AUDIT               
     2 ACCOUNT

当我按降序对dept_name进行排序时,我认为“培训”应高于“人力资源”。

我的理解哪里出错了?有人可以详细解释一下吗?


阅读 283

收藏
2021-03-23

共1个答案

小编典典

如果要按降序排列部门名称,则必须在查询中包括该信息:

ORDER BY (CASE DEPT_NAME
              WHEN 'ACCOUNT' THEN 1
              WHEN 'AUDIT' THEN 2
              WHEN 'FINANCE' THEN 3
              ELSE 4
          END) DESC,
         DEPT_NAME DESC;

没有理由将的值设置CASE为字符串。逻辑上确实需要一个数字。如果使用字符串,则大于9的值将无法正常工作。

2021-03-23