如何在 SQL 中按字母顺序排列两列,但其中一列可能为空

How to order alphabetically in SQL with two columns, but where either column may be empty

我正在使用 SQL 服务器,并且我有一个包含两列的 table,即 varchar、A 列和 B 列。我需要生成一个按字母顺序排列的列表顺序,但是这些列中只有一列会有值(即,如果 A 列有值,则 B 列将为 NULL,反之亦然)。

如何在我的 T-SQL 查询中编写 ORDER BY 子句以生成一个列表,该列表检查两列以查看哪一列具有存在的值,然后按字母顺序对行进行排序?

使用第一个 non-null 参数的 COALESCE

order by coalesce(columnA, columnB) asc

有一些标准选项可以执行此操作。您选择的内容主要是个人“品味”。最“明确”的方式是使用 CASE WHEN:

ORDER BY CASE WHEN columnA IS NULL THEN columnB ELSE columnA END;

显式是指您在不了解检查此功能的具体功能的情况下清楚地理解它。 适用于每个数据库的标准函数是 COALESCE:

ORDER BY COALESCE(columnA,columnB);

这样做的好处是它更短,尤其是当您有更多的列应该在 null 时相互替换时。 SQL Server DB 还提供函数 ISNULL 需要两个参数:

ORDER BY ISNULL(columnA,columnB);

这样做的好处是这个名字比“COALESCE”更能说明问题,而且根据一些性能文章和测试,它比其他两个选项更快。缺点是此功能不适用于其他数据库。 总的来说,正如我所说,主要是个人品味,你应该选择哪种方式。