- ベストアンサー
SQL文の作成
こんにちわ。 JAVAプログラム上でデータベースを使用して データを取得したいのですが、 SQL文が複雑でわかりません。 一度データを取得して、その値を基に次に参照するカラムが変わるというものなのですが、一度にできるものでしょうか? どなたかお力添えよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
SQLについてなら、カテゴリが違う気もしますが、 SQLにはCASE式が使えます。 たとえば SELECT AVG(CASE WHEN e.sal > 2000 THEN e.sal ELSE 2000 END) from emp e; など。 ORACLEであればDECODE関数で同様の処理が可能です。 また、複雑であれば自分で関数を作成する手もありますし、ワークテーブルに出力するという方法もあります。 ちがっていたらごめんなさい。
その他の回答 (2)
- lawson
- ベストアンサー率44% (29/65)
1) CASE式(OraceleはDECODE関数でもよい) を使う方法。 No1さんの回答を参照するとして、 詳細は割愛。 2) パフォーマンスの問題でどうしても、 1つの問い合わせだけで、解決したいので あれば。 >>一度データを取得して、その値を基に次に参照するカラムが とありますが、最初から、上の「その値」 の部分と、「参照するカラム」 の組み合わせの数だけ、 同じレイアウトの結果表を出力するSELECT文 パターンを用意して、 UNIONで合体させる。 パフォーマンスの問題が気にならないようであれば 「その値」 を取得するためのSQLを発行して、 その後、 「参照するカラム」 の種類ごとに用意した、 SQL文のうちどれを発行するかを判断する。 3) さらに、パフォーマンスが気にならずにに、 コードのメンテナンス性もあげたければ、 動的SQLを使う。 SQL文の文字列をjava側で作成して、 それを実行する。 「その値」の部分を取得するSQL(これは静的SQL) で取得した結果を見て。 「参照するカラム」部分だけを変化させた SQL文を実行時に作成して、 発行する。 ※補足 なお、 >>一度データを取得して、その値を基に次に参照するカラムが変わる らしいので、服問い合わせだと。 困難だと思われます。 値の問題ではなく、見ているカラム自体が 変わるようであれば、 SQL文そのものの、コードの記述方法に パターンわけが必要になるかもしれません。 なので、2), 3)のようにするのがよいかもしれない。 最後に、もし、私を含めて、ここに回答している 人の回答内容があいまいで役にたたないと、 思うのでしたら、 それは、自分が書いた質問文があいまいだから。 そうならざるを得なかったと理解してください。 以上
- ryoppemag
- ベストアンサー率15% (15/96)
副問合せでできません?