4

4 つのパラメーターがあるという要件があります。p1、p2、p3、p4。ユーザーは、これらの単一または組み合わせのいずれかを入力できます。合計およびグループ化によって入力した列のみを表示したいです。他の列は除外する必要があります。これを行うにはどうすればよいですか?

4

3 に答える 3

2

このようなものがうまくいくかもしれません(あなたの質問は非常に曖昧であるため、100%確実ではありません)

SELECT
  CASE WHEN :p1 = 0 THEN p1 ELSE NULL END AS p1,
  CASE WHEN :p2 = 0 THEN p2 ELSE NULL END AS p2,
  CASE WHEN :p3 = 0 THEN p3 ELSE NULL END AS p3,
  CASE WHEN :p4 = 0 THEN p4 ELSE NULL END AS p4
FROM
  yourTable
GROUP BY
  CASE WHEN :p1 = 0 THEN p1 ELSE NULL END,
  CASE WHEN :p2 = 0 THEN p2 ELSE NULL END,
  CASE WHEN :p3 = 0 THEN p3 ELSE NULL END,
  CASE WHEN :p4 = 0 THEN p4 ELSE NULL END

ただし、このタイプのクエリでは、SQL のパフォーマンスが非常に悪いことが多いことに注意してください。

固定クエリごとに、個別のプランがコンパイルされます。結果を生成するために使用されるアルゴリズムは、その時点で固定されます。パラメータが変更されても再コンパイルされません。

GROUP BY p1, p2インデックスによっては、 を使用する場合とは根本的に異なる計画になる可能性があるため、これは重要ですGROUP BY p3, p4

そのため、多くの場合、コードで SQL ステートメントを再生成する方がパフォーマンスが大幅に向上します。

パラメーターを使用してどのフィールドを集計するかを SQL に指示するのではなく、パラメーターを使用してまったく新しい SQL ステートメントを記述し、代わりにその新しい SQL ステートメントを実行します。

于 2012-10-22T09:25:15.113 に答える
0

mysql で group concat のようなものを使用したい場合、これが役立ち ます 複数の行を 1 つの行に集約する Oracle SQL クエリはありますか?

于 2012-10-22T09:59:27.813 に答える
0

この問題は、動的 SQL を使用することで解決できます。動的 SQL では、最初に入力パラメーターに基づいて選択ステートメントを構築し、次に、EXECUTE IMMEDIATE などを使用してクエリを実行できます。動的 SQL の使用方法については、 Oracle のドキュメントを参照してください。

于 2012-10-23T06:09:01.897 に答える