![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
SQL文のOrder by句で2つのバインド変数を用いて、ソートする項目・ソート順を決めたいと思い、以下のようなSQLを作成いたしました。
Select row_Number() Over(Order by
Case :ITEM
When 'PJコード' then PJコード
When '部署コード' then 部署コード
end
Case :LINE
When '1' then DESC
When '2' then ASC
end ....
バインド変数を直接Order by句に入れますと、結果は帰ってくるのですが、バインド変数の値がすべて無視されてデータが出力されます。
以上の理由より、Case文にてバインド変数の値を参照し、ソートする項目と順番を決めております。
上記のソースで実行しますとORA-00907:右かっこがありませんというエラーが表示されます。
2つ目のCase文(:LINE)を消し、最初のCase文だけを残して、並び順(DESC・ASC)を埋め込むと、実行される状態になります。
Oracleのバージョンは11gです。
ご回答よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
Order by 項目名 asc/desc
で、項目名に case文は、使えるけど、
asc/desc にcase文は使えません。
(1つ目のCase文は項目名を指定しているのと同じで、1レコードずつ処理されて同じCase文の結果を
1レコードづつ返していると思うけど、内部処理の話なのではっきりしたことはわかりません。)
>2つ目のCase文(:LINE)を消し、最初のCase文だけを残して、並び順(DESC・ASC)を埋め込むと、
>実行される状態になります。
では、デフォルトのascが適用されて実行できている。
じゃあどうすれば実現できるのかといわれると、
SQLを発行している元の処理が何かわからないので最善かどうかはわかりませんが、
SQLで実行するなら、
Select case :LINE when '1' then
(row_Number() Over(Order by
Case :ITEM
When 'PJコード' then PJコード
When '部署コード' then 部署コード
end
desc)
when '2'
(row_Number() Over(Order by
Case :ITEM
When 'PJコード' then PJコード
When '部署コード' then 部署コード
end
asc)
end
....
とでもするしかないと思います。
※未検証。
この回答への補足
先ほどのお礼でエラーが発生すると書きましたが、かっこの位置が間違えたまま実行しておりまして、エラーが発生しておりました。
大変申し訳ありません。
かっこの位置を正しいものに修正し、再度実行したところ、目的としているソートができるようになりました。
ご回答、ありがとうございました。
ご回答ありがとうございます。
返信が遅くなり、申し訳ございません。
ご回答していただきました方法でSQL文を再構築いたしましたが、DESC・ASCを入れると、”右かっこがありません"のエラーメッセージが発生して、SQL文が実行できませんでした…
試しにDESC・ASCを外して実行するとSQL文が発行し、:ITEMで指定した項目でソートできました。
やはりバインド変数でDESC・ASCを決定するのは無理なのかもしれません…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- その他(プログラミング・Web制作) Rでのスクリプトのご相談 3 2022/12/08 16:22
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- IT・エンジニアリング ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:17
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
娘の学校から出た暗号解読です...
-
沿線コード
-
CREATE テーブルでの複数外部...
-
Access終了時の最適化が失敗?
-
【SQL】登録されているかを比較...
-
SQL GROUP BY
-
SQLの集約の方法
-
SQL 特定のカラムが最大値のレ...
-
10営業日前の日付を取得したい...
-
GROUP BYを行った後に結合した...
-
Oracleでの文字列連結サイズの上限
-
SELECTで1件のみ取得するには?
-
Accessで別テーブルの値をフォ...
-
アクセスでレポートの1印刷内...
-
Excelで、改行がある場合の条件...
-
SQL文で右から1文字だけ削除す...
-
GROUP BYを使ったSELECT文の総...
-
SELECTの結果で同一行を複数回...
-
ADO VBA 実行時エラー3021
-
固定値を含む結合と複数テーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
Order by句でバインド変数を使...
-
沿線コード
-
ヤマト急便のチェックデジット...
-
SQLServer 日付が直前のレコー...
-
困っています。ORACLE_SQL 複数...
-
Excelファイルのデータをテーブ...
-
SQL 特定のカラムが最大値のレ...
-
10営業日前の日付を取得したい...
-
平成20年 春期 基本情報技術者 ...
-
スペシャリストの方! 助けてく...
-
【SQL】またぎデータの検索の仕方
-
SQLの質問
-
SQLについて
-
SQLの実行結果が異なる
-
SQLにて縦を横へ展開
-
DoCmd.ApplyFilter引数を文字に...
-
Access Dlookup関数について
-
RDBの親子関係の表現について
おすすめ情報