sql - ORDER BY的列有时为空

标签 sql sql-order-by coalesce

我的SQL看起来像这样:

SELECT CompanyName , LastName , FirstName FROM ... JOIN ...
ORDER BY CompanyName , LastName , FirstName

现在的问题是,列A有时为空(如NULL""),我不希望所有这些结果最后都出现。

在示例中,我希望第四个条目(以C开头)为第三个。但是,如果我只是按ORDER BY,则会发生这种情况:
Avagax Bauer Frank
Bele AG Smith John
Mork AG Baggins Frodo
Chen Jun

另外,在某些情况下,有时我会设置更多按顺序排列的列,或多或少地重要。这可能是相关的。

附录:姓氏或公司必须有一个有用的字符串。名字是完全可选的。系统是PostgreSQL(8.4,可能会迁移到9),还有SQLite。独立于供应商将是一个加分项,因为已经有潜在的客户在运行Oracle和SQLServer。

最佳答案

您可能需要调整它以适合您的需求,但是据我了解,这应该可以解决问题:

SELECT CompanyName , LastName , FirstName FROM ... JOIN ...
ORDER BY COALESCE(CompanyName , LastName, FirstName),
         COALESCE(LastName, FirstName),
         FirstName

这将主要按三个不为空的列中的第一个进行排序,然后按姓氏或名字排序,最后按名字排序。在我看来,这种排序没有多大意义,但是YMMV。

关于sql - ORDER BY的列有时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8120953/

相关文章:

mysql - 将行转为列 - 评级数据库

mysql - 具有 2 个连接和 GROUPBY 的查询中的 WHERE 子句?

mysql - 返回尚未关注(或查看)的最受关注用户

MySQL 基本查询耗时特别长 - 解释计划看起来不错

mysql - 如果没有行,则返回 "Enter text"。 (非法混合排序规则)

hibernate - JPA 中 Coalesce 或 Case 语句的使用

mysql - 我想根据 where 子句在不同列上显示一列数据总和

linq - LInq排序依据和降序排列

mysql - 根据另一个表的值对表的查询进行排序

SQL BCP 无法为标识列插入值