質問 |
||
| 質問者: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, 日付; |