2012-03-20 14 views
1

SQL Serverでは、1つのヌル値を降順に含むIDなどの列があります。 ex。私が上に下降するが、nullを注文するために、これを必要SQL ServerのNULLの降順と配置

ID 
==== 
20 
19 
18 
... 
2 
1 
null 

select id from mytable order by id desc 

ID 
==== 
null 
20 
19 
18 
... 
2 
1 

nullが前

union all 

の結果であり、そこにする必要があります。 私は、人工的な多数の作成など、いくつかのアイディアを持っていました。 あなたの人が思いつくものを見たいだけです。 楽しんでください!

答えて

5

ORDER BYCASEを使用して、最初にNULLを強制してください。これはSQL Serverでサポートされています。

SELECT 
    id 
FROM mytable 
ORDER BY 
    CASE WHEN id IS NULL THEN 0 ELSE 1 END, 
    id DESC 

それはそれは他のすべてのためにNULLのための0と1を保持してソートするためにどの「列」を導出することにより動作します。 を追加すると、残った行(派生1を持つもの)を強制的に降順でソートするようになります。を追加すると、ORDER BY列チェーンの残りの部分が追加されます。

+0

それはリストの一番下に置かれますが、私は一番上にそれを必要とします!しかし、私は何かにIDを設定することができました – Har

+0

@HarHaHuあなたがコメントしていた間に少し編集を行いました。あなたが望むものを得るべき現在のバージョンを見てください。 –

+0

@HarHaHu、この回答が機能します。それを試してみてください。 –

1

通常、使用している特定のDBMSを知るのに役立ちますが、一般的にいくつかのオプションがあります。

CASEは通常ORDER BYでサポートされていますので、あなたのような何かを行うことができます。

ORDER BY COALESCE(ID, 2147483647) DESC --or whatever your maxint is 

ORDER BY CASE ID WHEN IS NULL THEN 1 ELSE 0 DESC, ID DESC 

またはあなたが多数をあなたが示唆したように行い、使用することができ、後者は、より効率的かもしれクエリプランを見てみましょう。

2

あなたのDBMSを指定していないが、それはANSIでは、次の操作を行うことができます準拠している場合:

ORDER BY id NULLS FIRST 

(これは、Oracle、PostgreSQLの、DB2、H2、HSQLDB、ダービー、Firebirdの上で動作します)

+0

申し訳ありませんが、幻想的なオプションですが、SQL Serverではサポートされていません – Har

関連する問題