SQL 对包含空值的多个列排序
SQL Order By on multiple columns containing Nulls
我有一个包含多列的 table,我想按 table 中的三列排序。我想按批次订购,然后是单位,最后是编号。 Lot 和 Unit 可以包含空值(需要将它们列在底部),而 Number 列不包含 Null。我尝试了一堆案例陈述,但没有给出预期的结果。 - Order by ... Nulls last 不是一个选项。
Lot
Unit
Number
Null
Null
500
Null
Null
425
Null
Null
424
Null
7
419
Null
9
450
25
Null
475
22
Null
486
22
Null
485
19
7
465
19
9
432
想要的结果:
Lot
Unit
Number
19
7
465
19
9
432
22
Null
485
22
Null
486
25
Null
475
Null
7
419
Null
9
450
Null
Null
424
Null
Null
425
Null
Null
500
您可以通过检查空值来进行排序:
SELECT *
FROM yourtable
ORDER BY CASE WHEN lot IS NULL THEN 1 ELSE 0 END
, lot
, CASE WHEN unit IS NULL THEN 1 ELSE 0 END
, unit
, number
您已标记您的问题 SQL,但未提及数据库。标准 SQL 有一个非常方便的方法来做你想做的事:
order by Lot nulls last, Unit nulls last, Number
并非所有数据库都支持 nulls last
和 nulls first
,但这是标准的 SQL 解决方案。
我有一个包含多列的 table,我想按 table 中的三列排序。我想按批次订购,然后是单位,最后是编号。 Lot 和 Unit 可以包含空值(需要将它们列在底部),而 Number 列不包含 Null。我尝试了一堆案例陈述,但没有给出预期的结果。 - Order by ... Nulls last 不是一个选项。
Lot | Unit | Number |
---|---|---|
Null | Null | 500 |
Null | Null | 425 |
Null | Null | 424 |
Null | 7 | 419 |
Null | 9 | 450 |
25 | Null | 475 |
22 | Null | 486 |
22 | Null | 485 |
19 | 7 | 465 |
19 | 9 | 432 |
想要的结果:
Lot | Unit | Number |
---|---|---|
19 | 7 | 465 |
19 | 9 | 432 |
22 | Null | 485 |
22 | Null | 486 |
25 | Null | 475 |
Null | 7 | 419 |
Null | 9 | 450 |
Null | Null | 424 |
Null | Null | 425 |
Null | Null | 500 |
您可以通过检查空值来进行排序:
SELECT *
FROM yourtable
ORDER BY CASE WHEN lot IS NULL THEN 1 ELSE 0 END
, lot
, CASE WHEN unit IS NULL THEN 1 ELSE 0 END
, unit
, number
您已标记您的问题 SQL,但未提及数据库。标准 SQL 有一个非常方便的方法来做你想做的事:
order by Lot nulls last, Unit nulls last, Number
并非所有数据库都支持 nulls last
和 nulls first
,但这是标准的 SQL 解决方案。