• ベストアンサー

SQL文の作成

こんにちわ。 JAVAプログラム上でデータベースを使用して データを取得したいのですが、 SQL文が複雑でわかりません。 一度データを取得して、その値を基に次に参照するカラムが変わるというものなのですが、一度にできるものでしょうか? どなたかお力添えよろしくお願いします。

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

  • ベストアンサー
  • potedora
  • ベストアンサー率47% (66/140)
回答No.1

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)
回答No.3

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)
回答No.2

副問合せでできません?

関連するQ&A