• ベストアンサー

SQLコマンドのorder by句

受注金額の大きい順にリストするために select 受注番号,受注金額 from 受注テーブル order by 受注金額 desc; を発行すると、受注金額(数値型)が未定義(null)のものが上位になってしまします。 受注金額がnullのものを零より小さい扱いでリストする方法を教えて下さい。 尚、・・・ where 受注金額 is not null は不可です。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • pcg733
  • ベストアンサー率78% (11/14)
回答No.3

受注金額がnullのものを-1としても良いなら、 select 受注番号,NVL(受注金額,-1) as AAA from 受注テーブル order by AAA desc; でOKかと思います。 はずしてたらごめんなさい。

moderno_parco
質問者

お礼

おかげさまで欲しいデータの取得ができました。 SQLはパズルですね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

単純な方法はないように思います。 泥臭いですが、ヌルとヌル以外を別処理してUNIONでつないでは? SELECT文が2つになって大変ですけどね。 あとは属性を追加してヌルをマイナスに置き換えとか?

moderno_parco
質問者

お礼

ヌルをマイナスに置き換きかえる関数を使って試してみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

データベースサーバに何を使っているのかが わからないので、なんともいえないのですが、 select 受注番号,受注金額 from 受注テーブル WHERE 受注金額 is not null order by 受注金額 desc union select 受注番号,受注金額 from 受注テーブル WHERE 受注金額 is null ではだめなのですか?

moderno_parco
質問者

お礼

oracle8i、SqlPlus、WindowsNTです。 エラー行: 4: エラーが発生しました。 ORA-00933: SQLコマンドが正しく終了されていません。 といわれました。 ご指導ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ORDER BY句を使用しているSQL文に関して質問です。

    ORDER BY句を使用しているSQL文に関して質問です。 SELECT文にてORDER BY句を使用した場合、SELECT結果の件数によってソート順が変わるような事はあるのでしょうか? 事象としては以下の通りです。 以下のCUSTOMERテーブルがあるとします。 |店番|顧客番号|一連番号|一連番号枝番| |MISE|KOKYAKU |ITIREN |IEIRENEDANO | |0001|11111111|00000001|000000000000| |0001|11111111|00000002|000000000000| |0001|11111111|00000003|000000000000| |0001|11111111|00000004|000000000000| |0001|11111111|00000005|000000000000| |0001|11111111|00000005|000000000001| |0001|22222222|00000001|000000000000| |0001|22222222|00000002|000000000000| |0001|22222222|00000003|000000000000| |0001|22222222|00000004|000000000000| |0001|22222222|00000005|000000000000| |0001|22222222|00000006|000000000000| |0001|22222222|00000007|000000000000| |0001|22222222|00000008|000000000000| |0001|22222222|00000009|000000000000| |0001|22222222|00000010|000000000000| |0001|22222222|00000011|000000000000| |0001|22222222|00000012|000000000000| |0001|22222222|00000013|000000000000| |0001|22222222|00000014|000000000000| |0001|22222222|00000014|000000000001| 埋め込みSQLを実行し、上記のテーブルに対し以下の条件でカーソルをオープンしました。 (1)SELECT ITIREN FROM CUSTOMER WHERE MISE = 0001 AND KOKYAKU = 11111111 ORDER BY ITIREN DESC (2)SELECT ITIREN FROM CUSTOMER WHERE MISE = 0001 AND KOKYAKU = 22222222 ORDER BY ITIREN DESC カーソルの1件目をFETCHしたところ、以下のような結果となりました。 (1) |店番|顧客番号|一連番号|一連番号枝番| |MISE|KOKYAKU |ITIREN |IEIRENEDANO | |0001|11111111|00000005|000000000001| (2) |店番|顧客番号|一連番号|一連番号枝番| |MISE|KOKYAKU |ITIREN |IEIRENEDANO | |0001|22222222|00000014|000000000000| 一連番号枝番をORDER BY句のソート条件に追加するか、WHERE句の条件についかすれば事象は解決するのですが、同様のSQLを実行しているのに結果が変わってしまうのがどうしても解せません。 もしご存知の方がいらっしゃいましたら、ご教授頂けると助かります。 テーブルの内容をごちゃごちゃと書いてしまったので、見づらくてすみません。。。 レイアウトがずれてたら更にすみませんm(_ _)m HTMLのタグって使えるんでしょうかね?

  • GROUPBY ORDER BY

    idの大きい順から並べたいのですがうまくいきません 調べて サブクエリなどを使い実行しましたがうまくいきませんでした ご教授お願いいたします ソース $sql='SELECT memberid,mailid,max(name),max(day) FROM messageall WHERE mailid=? GROUP BY memberid ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset; サブクエリでも試しましたが正直 ソースがめちゃくちゃでデータが表示されませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • mysql order by のNULLについて

    mysql order by のNULLについて テーブル tb1 memberid 2   2 cardid  1   1 name 田中  井岡 day 2016.4.10  2016.4.22 new  New NULL ソース SELECT memberid,cardid,max(name),max(day),max(new) FROM tb1 WHERE memberid=2 GROUP BY cardid ORDER BY max(day) DESC LIMIT '.$limit.' OFFSET '.$offset; すると max(new)の部分が Newと出てきます。 max(new)なのでNULLが出てくると思っていました。 NULLにしたいのですが 名前も井岡ではなく田中がでてきます max(day)をオーダーしているので新しい日の情報が出てくると思っていましたが。。。。 何か SQLの書き方に問題があるのでしょうか それともこのテーブルの作りでは不可能なのでしょうか? 無知な私に ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • ORDER BY句の指定

    MySQL 4.0.26 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2273403 の続きになります。 ORDER BY句をつけて、人口密度でソートしたいときは、 SELECT 人口,面積,人口/面積 AS 密度 FROM MYTABLE WHERE 人口/面積 >20 ORDER BY ??? この???には、人口/面積が正解でしょうか?

    • ベストアンサー
    • MySQL
  • order byで並び変えし最大値の項目の抽出方法ついて

    すみません。 order byで並び変えし最大値の項目のみ一意で抽出したいのですが 、 SELECT * from ta order by no,date1,date2; no | date1 | date2 ----+-------+------- 11 | 2008 | 0501 11 | 2008 | 0502 11 | 2008 | 0502 11 | 2008 | 0503 12 | 2008 | 0501 12 | 2008 | 0502 12 | 2008 | 0503 13 | 2008 | 0501 13 | 2008 | 0502 13 | 2008 | 0503 14 | 2008 | 0501 とあった場合、 no,date1,date2のorder by順番で並び変えし 11 | 2008 | 0503 12 | 2008 | 0503 13 | 2008 | 0503 14 | 2008 | 0501 とno項目に対し一つずつだけ出力したい場合どのようにしたらよいのでしょうか? LIMITとoffsetだと1項目分しか出力されず困っております。 SELECT * from ta where no in (select no from ta group by no limit 1 offset 0) order by no,date1 desc,date2 desc limit 1; 宜しくお願い致します。

  • 秀丸でSQLを書く際に SQLの予約語だけ大文字

    秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。

  • SQL 句の評価順

    SQL句の評価順について皆さんの意見をいただけないでしょうか? <ケース1:SELECTが最後> ・FROM ・WHERE ・GROUP ・HAVING ・ORDER ・SELECT <ケース2:SELECTがトップ> ・SELECT ・FROM ・WHERE ・GROUP ・HAVING ・ORDER <ケース3:ORDERの前にSELECT> ・FROM ・WHERE ・GROUP ・HAVING ・SELECT ・ORDER どのケースで評価されますでしょうか? ご教授お願いします。

  • where order by

    where order by についてお教え下さい。 データの参照で strSQL = "select * from DATA Where TYPE_NO=" & TYPE_NO で、それぞれのタイプは表示できるのですが、 order byで降順表示したいのですが、組み合わせ方が分かりません。 ご教授下さい。

  • サブクエリーを使わずに二つのカラムをORDER BYし、さらに重複を除きたい

    以下のようなテーブルで、価格の高い順、重さの低い順、かつ種別の重複を除いた結果を求めたいと思っています。 (表はエディタ等にコピペしてご確認ください) ■商品テーブル 商品CD|種別CD| 価格 | 重さ ------+------+------+------ 1| 1| 150| 12 ------+------+------+------ 2| 1| 110| 8 ------+------+------+------ 3| 2| 120| 11 ------+------+------+------ 4| 2| 105| 15 ------+------+------+------ 5| 2| 112| 7 ------+------+------+------ 6| 3| 110| 13 ------+------+------+------ 7| 3| 130| 5 ------+------+------+------ 8| 3| 90| 3 ------+------+------+------ 9| 4| 120| 6 ------+------+------+------ 10| 4| 120| 3 ------+------+------+------ 11| 4| 110| 10 ------+------+------+------ ■欲しい結果 商品CD|種別CD| 価格 | 重さ ------+------+------+------ 1| 1| 150| 12 ------+------+------+------ 7| 3| 130| 5 ------+------+------+------ 10| 4| 120| 3 ------+------+------+------ 3| 2| 120| 11 ------+------+------+------ サブクエリーを使用する場合は以下のように書けばよいことが分かりました。 SELECT * FROM (SELECT * FROM shohin ORDER BY KAKAKU DESC,OMOSA ) temp GROUP BY SHUBETSUCD ORDER BY KAKAKU DESC,OMOSA しかし、今回使用しているMySQLのバージョンが古いため、サブクエリーが使えません。サブクエリーを使用せずに同様の結果を求める方法はございますでしょうか? ご存知の方がいらっしゃいましたら、ご教示いただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SQLで部分的にGROUP BYしたいとき(その2

    こんばんわ。 先日こちら(http://okwave.jp/qa/q7666702.html) で質問させていただきましたが、まだ問題があったため、 再度質問させていただきます。 以下のような20カラムある「出納帳」テーブルがあって、 同一日付の金額を集約してしまいたいです。 出納帳 ID 日付   金額 伝票 ・・・(全20カラム) 1 2012/8/20 1000 A01 ・・・ 2 2012/8/20 2000 A02 ・・・ 3 2012/8/21 -1000 B01 ・・・ 4 2012/8/21 -2000 B02 ・・・ 5 2012/8/22 3000 A03 ・・・ 6 2012/8/23 4000 A04 ・・・ 7 2012/8/24 -3000 B03 ・・・ 8 2012/8/24 -4000 B04 ・・・ 9 2012/8/27 5000 A05 ・・・ ↓「日付」で金額集約 ID 日付   金額 伝票 ・・・(全20カラム) 1 2012/8/20 1000 A01 ・・・ 2 2012/8/20 2000 A02 ・・・  2012/8/21 -3000    ・・・(-1000と-2000を集約) 5 2012/8/22 3000 A03 ・・・ 6 2012/8/23 4000 A04 ・・・  2012/8/24 -7000    ・・・(-3000と-4000を集約) 9 2012/8/27 5000 A05 ・・・ と集約キー以外はNULLにしたいのですが、 またまた、 ( SELECT ID, 日付, 金額, 伝票, ・・・ FROM  出納帳 WHERE  金額>=0 UNION ALL SELECT NULL, 日付, SUM(金額), NULL, ・・・ FROM  出納帳 WHERE  金額<0 GROUP BY 日付 ) ORDER BY 日付 とUNIONをする方法しか思いつかなかったのですが、 UNIONせずに端的に表現できるSQLはありますでしょうか?

ルーター交換後の印刷不能
このQ&Aのポイント
  • LAN接続のMFC-L5755DWでルーター交換後に印刷できない問題が発生
  • 印刷できない原因としては、新しいルーターの設定が必要かもしれない
  • 解決方法は、ルーターの設定を確認し、MFC-L5755DWの設定を再度行うこと
回答を見る