10

私のSQLは次のようになります。

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

ここで問題となるのは、列Aが空になることがあり(asNULLまたは"")であり、これらすべての結果が最終的に表示されないようにする必要があります。

この例では、4番目のエントリ(Cで始まる)を3番目にします。しかし、私が注文するだけの場合、これは起こります:

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

これは主に、最初にnullでない3つの列のいずれか、次に姓または名、最後に名のいずれかで並べ替えられます。私の意見では、この順序はあまり意味がありませんが、YMMVです。

于 2011-11-14T11:47:56.137 に答える
1

nullの対象となるフィールドのORDERBYに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 に答える