ORDER BY,列有时是空的

Kaj*_*Abt 8 sql coalesce sql-order-by

我的SQL看起来像这样:

SELECT CompanyName , LastName , FirstName FROM ... JOIN ...
ORDER BY CompanyName , LastName , FirstName
Run Code Online (Sandbox Code Playgroud)

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

在这个例子中,我想让第四个条目(以C开头)成为第三个条目.但如果我只是ORDER BY,就会发生这种情况:

Avagax Bauer Frank
Bele AG Smith John
Mork AG Baggins Frodo
Chen Jun
Run Code Online (Sandbox Code Playgroud)

此外,在某些情况下,我有时会有更多的订单列,或者更重要或更不重要.这可能是相关的.

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

Pat*_*and 15

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

SELECT CompanyName , LastName , FirstName FROM ... JOIN ...
ORDER BY COALESCE(CompanyName , LastName, FirstName),
         COALESCE(LastName, FirstName),
         FirstName
Run Code Online (Sandbox Code Playgroud)

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

  • @Kdansky:尝试将除最后一个参数(即“FirstName”除外)之外的 COALESCE 参数包装到“NULLIF”中:“... ORDER BY COALESCE(NULLIF(CompanyName, ''), NULLIF(LastName, ''), FirstName), COALESCE (NULLIF(姓氏, ''), 名字), 名字`。 (2认同)