1.説明
1.1問題説明
実際運用する時、特に検索画面には、固定的なデータセットではなく、動的にSQL文を実行する場合が多いです。
1.2実現方法
例文:SELECT * FROM 販売量 WHERE 地域 = '${p_area}'
①動的に検索条件の値をSQL文に入れることができます
例えば検索ウィジェット「地域」のウィジェット名は「p_area」の場合、変数「p_area」でウィジェットの値を取得できます
②SQL文にFineReport数式を利用できます
${}中の内容はFineReport数式で処理する
2.事例
2.1検索条件は空白の場合全ての結果を抽出
データセット設定
SELECT* FROM 販売量 WHERE 1=1 ${if(len(p_area)!=0,"AND 地域 = '"+p_area+"'","")}
注意:${}中の内容はFineReport数式として処理する
注意:数式if()でロジック処理行う
注意:数式len()でp_area変数の桁数を取得する
「p_area」に値がある場合、下記のSQL文を実行
SELECT * FROM 販売量 WHERE 1=1
「p_area」に値がある場合(例えばp_areaは関東)、下記のSQL文を実行
SELECT * FROM 販売量 WHERE 1=1 AND 地域 = '関東'
2.2プルダウンチェックボックスウィジェットの場合WHERE条件の書き方
例えば検索条件「地域」の選択しは「関東、関西、近畿」の場合
ウィジェット設定
最終的に「p_area」の値は「関東','関西','近畿」になります
データセット設定
SELECT * FROM 販売量 WHERE 地域 IN ('${p_area}')
最終的で下記のSQL文を実行
SELECT * FROM 販売量 WHERE 地域 IN ('関東','関西','近畿')
検索条件が空白の場合全ての結果を抽出
SELECT * FROM 販売量
WHERE 1=1 ${if(len(p_area)!=0,"AND 地域 IN ("+p_area+")","")}
2.3二つDB間の関連検索
例えば
販売員情報はDB1に保存、データ接続名はDB1
販売量情報はDB2に保存、データ接続名はDB2
二つDB何のでSQLのJOIN操作はできません。販売員「Aさん」が所属する地域の販売量情報を取得したい場合、下記のSQL()数式で実現できます
SELECT * FROM 販売量
WHERE 地域 = '${SQL("DB1","SELECT 地域 FROM 販売量 WHERE 販売員 = 'Aさん'",1,1)}'
注意:SQL()の使い方は数式編集画面に確認できます
2.4変数の区切り文字がコンマ
例えば「関東,関西,近畿」の場合、SQLの文法と合わないのでそのまま利用できません、数式REPLACE()で変換する必要があります。
例文:
SELECT * FROM 販売量 WHERE 地域 IN ('${REPLACE(p_area,",","','")}')
注意:REPLACE()の使い方は数式編集画面に確認できます
3.テンプレート
検索条件は空白の場合全ての結果を抽出
プルダウンチェックボックスウィジェットの場合WHERE条件の書き方
二つDB間の関連検索