ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:sadoru NULLは表示順最下位
困り度:
  • 困っています
NULLの行を最下位にする場合は、下記のようなコードで解決できました。

select * from table order by
case when TEST is null then 0 else 1 end Asc

例) 
NULL | 1
3 | 2
1 |→  3
2 |NULL

これを、時間(HH:MM)をソートする時に、順番が思うように行きません。
3:20 | 1:10
1:10   |→  9:10
9:10 | NULL
NULL | 3:20
上記のような順にソートされてしまいます。 
1:10
3:20
9:10
NULL
の順にするには、何かよい方法はありませんでしょうか?よろしくお願い致します。
質問投稿日時:08/03/22 18:26
質問番号:3885384
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:nora1962 SQLCMD(バージョンによってはOSQL)で下記のようにやっても、NULLが
最後尾に出力されませんか?
create table tbl
(
dt nvarchar(5)
)
go
insert into tbl values ( NULL );
insert into tbl values ( N'01:10' );
insert into tbl values ( N'03:20' );
insert into tbl values ( N'09:10' );
go
select dt
from tbl
order by case when dt is null then 1 else 0 end, dt;
go
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/23 21:46
回答番号:No.3
この回答へのお礼khazad-leftyさんの御指摘通り、データに問題がありました。
下記の通りで思い通りにソートできました。原因は、NULLと""(空白)がデータにあり、頂いたコードですと、""が認識できなかったようです。せっかく頂いたコードですが、勉強にさせて頂きました。ありがとう御座います。

select * from テーブル order by case when 日付 is null then '2' when 日付 = '' then '1' else 0 end, 日付;

回答

良回答20pt

回答者:khazad-lefty #なんだか元データに問題があるような木もするのですが…。

とりあえず、
select
case when 日付 is null then 0 else 1 end As Sortkey
,* from table order by
case when 日付 is null then 0 else 1 end Asc

を流してみて、Sortkey列にどのような値が出ますか?

あと、「日付」の型はDate型ですか?それとも別の型ですか?
種類:補足要求
どんな人:経験者
自信:自信あり
回答日時:08/03/23 11:27
回答番号:No.2
この回答への補足申し訳御座いませんでした。
khazad-leftyさんの御指摘通り、データに問題がありました。
下記の通りで思い通りにソートできました。原因は、NULLと""(空白)がデータにあり、頂いたコードですと、""が認識できなかったようです。私の不手際で御迷惑をお掛けいたしました。 今後ともよろしくお願い致します。 ありがとう御座います。

select * from テーブル order by case when 日付 is null then '2' when 日付 = '' then '1' else 0 end, 日付;
この回答へのお礼ご返信誠にありがとう御座います。

1. Sortkey列の値
1:10 → 1
3:20 → 1
9:10 → 1
NULL → 0

2. 日付の型は、NVARCHAR です。

以上、よろしくお願いします。

回答

良回答10pt

回答者:nora1962 select * from テーブル order by case when 日付 is null then 1 else 0 end, 日付;
で行けませんか。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/22 22:20
回答番号:No.1
この回答への補足お返事ありがとうございます。 
せっかくお返事を頂いたのですが、依然NULLが先頭にきてしまいます。
この回答へのお礼申し訳御座いませんでした。
khazad-leftyさんの御指摘通り、データに問題がありました。
下記の通りで思い通りにソートできました。原因は、NULLと""(空白)がデータにあり、頂いたコードですと、""が認識できなかったようです。私の不手際で御迷惑をお掛けいたしました。 今後ともよろしくお願い致します。 ありがとう御座います。

select * from テーブル order by case when 日付 is null then '2' when 日付 = '' then '1' else 0 end, 日付;
 
最新から表示回答順に表示良回答のみ表示