ORDER BY,列有时是空的

时间:2011-11-14 11:33:43

标签: 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。

3 个答案:

答案 0 :(得分:14)

您可能需要调整它以满足您的需求,但我理解它的方式,这应该可以解决问题:

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

这将主要按三个非首先为空的列中的任何一个排序,然后是最后一个或第一个名称,最后是名字。在我看来,这种排序没有多大意义,但YMMV。

答案 1 :(得分:1)

您应该在ORDER BY中为COALESCE设置为null的字段,例如:

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

答案 2 :(得分:0)

SELECT CASE WHEN CompanyName IS NOT NULL AND CompanyName <> '' THEN CompanyName ELSE '' END, 
  LastName , FirstName FROM ... JOIN ...
ORDER BY LastName, FirstName, CompanyName