パラメータの値によってJDBCデータソースのWhere句を動的に変更する

|
static QueryのWhere句をパラメータの条件によって変更させたい場合があります。
例えば、特定のパラメータ値が選択されている時だけある条件を追加するなどのような場合です。
しかし、レポートデザイナーは基本的には異なるクエリを動的に変更することができません。
つまり、データソース毎にStatic Queryを使用することになります。
このような場合、以下のようにSQLの記述を工夫することでWhere句を動的に表現できます。

SELECT * FROM TABLENAME
WHERE 1=1
AND (
(条件式1
AND 検索クエリ1
)
OR
(条件式2
AND 検索クエリ2
)
OR
(条件式3
AND 検索クエリ3
)
)
;

上記の場合、条件式の最初にTRUEになった検索クエリがWhere句に適用されます。
ネストさせることでより条件を複雑にすることもできます。

SELECT * FROM TABLENAME
WHERE 1=1
AND (
(条件式1-1
(条件式1-2
AND 検索クエリ1
)
)
OR
(条件式2
(条件式1-2
AND 検索クエリ1
)
)
OR
(条件式3
(条件式1-2
AND 検索クエリ1
)
)
)
;

例えば、以下のように記述した場合param1がaの場合はCOLUMN1、bの場合はCOLUMN2、cの場合はCOLUMN3のようにパラメータの値によってWhere句を変更することができます。

SELECT * FROM TABLENAME
WHERE 1=1
AND (
('a' = ${param1}
AND COLUMN1 = ${param1}
)
OR
('b' = ${param1}
AND COLUMN2 = ${param1}
)
OR
('c' = ${param1}
AND COLUMN3 = ${param1}
)
)
;

条件式は「=」や「!=」だけでなく「IN」なども使用できます。
パラメータ未設定の判定には、「=''」や「!=''」、または、「IS NULL」や「IS NOT NULL」で可能です。
※「=NULL」や「!=NULL」は正常に動作しません。

レポートデザイナというよりはSQLのTIPSですが
このようなクエリの記述を応用して、よりきめ細かなレポート動作を実現できます。

2018年3月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

月別 アーカイブ