3

私はしばらくの間この問題を経験してきました、そしてあなたが私を助けてくれることを願っています。

iReportでレポートを作成しましたが、一部のパラメーターがnullの場合でもレポートを入力したいと思います。

これが私が持っているものです

SELECT
    evento."titulo" AS evento_titulo,
    evento."data_inicio_realizacao" AS evento_data_inicio_realizacao,
    evento."data_fim_realizacao" AS evento_data_fim_realizacao,
    evento."id" AS evento_id
FROM
    "public"."evento" evento
WHERE
    evento."id" = $P{eventoid} OR
    evento."data_inicio_realizacao" BETWEEN $P{data1} AND $P{data2}

WHERE句をオプションにしたいのですが、つまり、これらのパラメーターをnull(またはidの場合は0の値)のままにすると、空白のレポートではなくすべての値を取得したいと思います。

出来ますか?$ P {WHERE_CLAUSE}を作成し、where句全体をその値として渡す人がいるのを見つけましたが、うまくいきませんでした。

4

3 に答える 3

7

現在実行している動的SQLの代わりにこれを実行できます...

select xxx
from <table>
where $P{eventoid} is null or evento."id" = $P{eventoid}

そのような古い投稿に返信してすみません...

于 2012-07-20T00:19:15.040 に答える
2

さて、私はもう少し頑張って、$P{}パラメータ内にWHERE句全体を渡すことによってそれを機能させる方法を見つけました。

WHERE句全体を削除して、次のように配置しました。

$P!{whereClause}

そこに1つのパラメーターを入れ、レポートから3つのパラメーター$ P {eventoid}、$ P {data1}、および$P{data2}を削除しました。

私はSpringMVCに取り組んでおり、クラスController内で、そのページのPOSTリクエストマッピングの下に、whereClauseという文字列変数を追加し、その値を「WHERE1 = 1」(または必要に応じてtrue)に設定しました。

String whereClause = "WHERE 1=1";

if (relIndice.getEventoId() != 0) {
    whereClause += " AND evento.id = " + relIndice.getEventoId().toString();
}

if (relIndice.getData1() != null) {
    whereClause += " AND evento.data_inicio_realizacao >= '" + relIndice.getData1().toString() + "'";
}

if (relIndice.getData2() != null) {
whereClause += " AND evento.data_inicio_realizacao <= '" + relIndice.getData2().toString() + "'";
}

whereClause += " ORDER BY evento.data_inicio_realizacao";

whereClause変数の初期値を設定した後、SQLのWHEREステートメントに含めたいフィールドの1つに対してそれぞれ3つのIFステートメントを作成しました。

「WHERE1=1はとにかく実行されるので、クリーンで機能する構文を作成するには、ANDの前に空白スペースが必要です。

そして最後に、とにかく実行されるORDERBY句を追加しました。これで、パラメーターの値は、使用するゲッターから取得する値になります。

私の場合、任意の値をnullまたはゼロのままにすることができます(eventoIdの場合はintであるため)。SELECTステートメントはWHERE句を認識しないため、そのテーブルのすべてのレコードを取得します。存在しない!

君たちありがとう!

于 2011-01-19T06:00:35.677 に答える
0

evento。"data_inicio_realizacao"$P{data1}と$P{data2}の間

これを交換してみてください

((evento。 "data_inicio_realizacao"> = $P{data1}または$P{data1}はnull)または(evento。 "data_inicio_realizacao" <= $P{data2}または$P{data2}はnull))

于 2011-01-18T11:30:44.627 に答える