# 2.5 处理排序空值

问题：

按照某个条件逻辑来排序

例如

如果job等于 salesman ，就要按照 comm 来排序，否则，按照SAL排序

解决方案1：

在 order by 子句里使用 case 表达式

```
select ename,sal,comm 
from EMP
order by
	case when JOB='SALESMAN' then COMM
	else SAL
	end
```

结果：

![](https://3748388522-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MRjpdT6PYM3zgtBC3PD%2F-Me8xVB8sYkfoUkeZD7i%2F-Me8ximQApCF85vRj3Bx%2Fimage.png?alt=media\&token=90f8ea0d-4c02-4fcb-809c-bc3d4b37c980)

解决方案2：

使用 CASE 表达式来动态改变如何对结果排序（构造辅助列）

```
select ename,sal,job,comm,
case when job = 'SALESMAN' then comm else SAL end as ordered
from EMP
order by 5
```

结果：

![](https://3748388522-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MRjpdT6PYM3zgtBC3PD%2F-MkjGi5hvgCjm86KMfkP%2F-MkjGzj9TfLjoU67oECt%2Fimage.png?alt=media\&token=1c19793f-8e8c-4dd1-a2d5-68ae8130e33d)
