我的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/

10-16 00:20