Oracle sql order by with case 语句
Oracle sql order by with case statement
我很难理解 oracle(12c) sql order by 子句和 case 语句。
我有一个包含以下数据的 table,
SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOGIC;
DEPT_NO DEPT_NAME
---------- --------------------
1 FINANCE
2 ACCOUNT
3 HUMAN RESOURCE
4 AUDIT
5 TRAINING
我在 oracle sql 开发人员上为此 table 执行以下 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 进行排序,因此我认为“培训”应该在 'human resource' 之上。
我的理解哪里错了?有人可以详细解释一下吗?
用解码功能试试这个,基本上做同样的事情。
SELECT DEPT_NO, DEPT_NAME
FROM SORTNG_LOGIC
ORDER BY
decode (DEPT_NAME,'ACCOUNT','1','AUDIT','2','FINANCE','3','4') DESC;
如果您希望部门名称按降序排列,则必须在查询中包含该信息:
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 的值将不会像您期望的那样工作。
我很难理解 oracle(12c) sql order by 子句和 case 语句。 我有一个包含以下数据的 table,
SELECT DEPT_NO, DEPT_NAME FROM SORTNG_LOGIC;
DEPT_NO DEPT_NAME
---------- --------------------
1 FINANCE
2 ACCOUNT
3 HUMAN RESOURCE
4 AUDIT
5 TRAINING
我在 oracle sql 开发人员上为此 table 执行以下 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 进行排序,因此我认为“培训”应该在 'human resource' 之上。
我的理解哪里错了?有人可以详细解释一下吗?
用解码功能试试这个,基本上做同样的事情。
SELECT DEPT_NO, DEPT_NAME
FROM SORTNG_LOGIC
ORDER BY
decode (DEPT_NAME,'ACCOUNT','1','AUDIT','2','FINANCE','3','4') DESC;
如果您希望部门名称按降序排列,则必须在查询中包含该信息:
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 的值将不会像您期望的那样工作。