我在理解带有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进行排序时,我认为“培训”应高于“人力资源”。
我的理解哪里出错了?有人可以详细解释一下吗?
如果要按降序排列部门名称,则必须在查询中包括该信息:
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的值将无法正常工作。
CASE