![](/img/trans.png)
[英]ORDER BY columns that are sometimes empty using Active Record & Rails
[英]ORDER BY with columns that are sometimes empty
我的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。
您应该在ORDER BY中为COALESCE设置为null的字段,例如:
SELECT CompanyName , LastName , FirstName FROM ... JOIN ...
ORDER BY CompanyName , LastName , COALESCE(FirstName,1)
SELECT CASE WHEN CompanyName IS NOT NULL AND CompanyName <> '' THEN CompanyName ELSE '' END,
LastName , FirstName FROM ... JOIN ...
ORDER BY LastName, FirstName, CompanyName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.