SQL 服务器:使用 ORDER BY 子句对 NULL 标记进行排序

SQL Server : sorting NULL Marks with ORDER BY clause

我有这个问题:

SELECT orderid, shippeddate
FROM Sales.Orders
WHERE custid = 20
ORDER BY shippedate;

输出为:

orderid shippeddate
------- -----------
11008   NULL
11072   NULL
10258   2006-07-23 00:00:00.000
10263   2006-07-31 00:00:00.000
10351   2006-11-20 00:00:00.000
10368   2006-12-02 00:00:00.000
...

作为练习,我试图弄清楚如何按 shippeddate 升序对订单进行排序,但将 NULL 排序在最后。

我知道 standard SQL 支持选项 NULL FIRSTNULL LAST,但 T-SQL 不支持此选项。

有什么建议吗?

谢谢

你可以这样做:

SELECT orderid, shippeddate
FROM Sales.Orders
WHERE custid = 20
ORDER BY case when shippeddate is null then 2 else 1 end, shippedate;

此外,

如果该字段为空,您可以使用 ISNULL

替换该字段中的值
ISNULL ( check_expression , replacement_value )

所以您的查询看起来像这样

SELECT ISNULL(orderid, '1900-01-01'), 
       shippeddate
FROM Sales.Orders
WHERE custid = 20 
ORDER BY shippedate asc;

因此,这会将该字段中的任何 NULL 替换为您可以排序的值(在本例中为 1900-01-01)