0

select ステートメントで if ステートメントを使用する方法はありますか?

これでは Case ステートメントを使用できません。実際に私はiReportを使用しており、パラメーターがあります。私がやりたいことは、ユーザーが特定のパラメーターを入力しないと、すべてのインスタンスが選択されることです。

たとえば、性別テーブルを参照する人物のテーブルで、where 句にパラメーターを指定すると、クエリは次のようになります。

SELECT * FROM persontable WHERE gender_id = $P{genderName}:numeric

パラメータ$P{genderName}が null または空白の場合、すべてが選択されます。私はこのクエリを試しました:

SELECT * FROM persontable WHERE gender_id IN (SELECT CASE WHEN $P{genderName} 
 IS NULL THEB (SELECT id from genderTable 
 WHERE id = $P{genderName}:numeric) ELSE $P{genderName}::numeric END)

しかし、「それ以上の行が返されます.....」というエラーが返されます.CASEステートメントが原因だと思います。どうすればいいですか?

4

2 に答える 2

3

これを試して:

SELECT * FROM persontable 
WHERE gender_id = $P{genderName} OR $P{genderName} IS NULL 
于 2012-11-10T07:45:09.447 に答える
1

これは、補助パラメータを使用して簡単に実現できます。

レポートで新しいパラメーターを定義し、名前を付けますaux_gendername

パラメータを定義する際に、そのDefault Value Expressionを微調整します。

($P{gendername}.equals("") || $P{gendername}==NULL? " " : " and gender_id = '"+$P{gendername}+"'")

次に、メイン クエリで、実際のパラメーター ($P{gendername}) の代わりに補助パラメーターを使用します。

SELECT * FROM persontable WHERE 1=1 $P!{aux_gendername}

$P{gendername} に何らかの値が含まれている場合条件がクエリに動的に追加されます。それ以外の場合、結果セット全体がフィルタリングなしでレポートに表示されます。

: !を使用して 補助パラメータでは必須です。

于 2012-12-07T12:11:10.353 に答える