
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
沿線コード
-
平成20年 春期 基本情報技術者 ...
-
困っています。ORACLE_SQL 複数...
-
SQL 特定のカラムが最大値のレ...
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
ワードの差込印刷で教えて下さ...
-
実績累計の求め方と意味を教え...
-
select insertで複数テーブルか...
-
ファイル書込みで一行もしくは...
-
Oracleでの文字列連結サイズの上限
-
最新の日付とその金額をクエリ...
-
レコードが存在しなかった場合
-
MERGE文を単体テーブルに対して...
-
カレントレコードが無い事を判...
-
Excelでセルの書式設定を使用し...
-
ADO VBA 実行時エラー3021
-
JSPのNULLレコード表示について...
-
Access を×ボタンで閉じ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
CREATE テーブルでの複数外部...
-
Order by句でバインド変数を使...
-
沿線コード
-
Access2000の重複チェック
-
SQL文の書き方
-
10営業日前の日付を取得したい...
-
DLookupの設定で・・・
-
また正規形について。
-
ヤマト急便のチェックデジット...
-
Access2007 データ型エラーに...
-
Access Dlookup関数について
-
WordPress(ワードプレス)に関...
-
SQLの題材
-
困っています。ORACLE_SQL 複数...
-
oracleでは出来るけど、access2...
-
平成20年 春期 基本情報技術者 ...
-
同一コード毎に最新の名称を取...
-
Excelファイルのデータをテーブ...
-
【SQL】またぎデータの検索の仕方
おすすめ情報