10

我的 SQL 看起来像这样:

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

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

在示例中,我希望将第四个条目(以 C 开头)作为第三个条目。但如果我只是订购,就会发生这种情况:

Avagax Bauer Frank
Bele AG Smith John
Mork AG Baggins Frodo
Chen Jun

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

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

4

3 回答 3

20

您可能需要对其进行调整以满足您的需求,但按照我的理解,这应该可以解决问题:

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

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

于 2011-11-14T11:47:56.137 回答
1

您应该在 ORDER BY 中放置一个 COALESCE,以便为空的字段,例如:

SELECT CompanyName , LastName , FirstName FROM ... JOIN ...
ORDER BY CompanyName , LastName , COALESCE(FirstName,1)
于 2011-11-14T11:40:12.360 回答
0
SELECT CASE WHEN CompanyName IS NOT NULL AND CompanyName <> '' THEN CompanyName ELSE '' END, 
  LastName , FirstName FROM ... JOIN ...
ORDER BY LastName, FirstName, CompanyName
于 2011-11-14T11:43:04.343 回答