有没有办法可以在select语句中使用if语句?
我不能在这个中使用Case语句。其实我正在使用 iReport ,我有一个参数。我想要做的是如果用户没有输入某个参数,它将选择所有实例。
例如,引用性别表的人员表,a带有where子句的参数,查询将如下:
SELECT * FROM persontable WHERE gender_id = $P{genderName}:numeric
如果参数 $ P {genderName} 为空或空白,则会选择全部。我试过这个问题:
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声明。我怎么做?
答案 0 :(得分:3)
试试这个:
SELECT * FROM persontable
WHERE gender_id = $P{genderName} OR $P{genderName} IS NULL
答案 1 :(得分:1)
使用 辅助参数 可以轻松实现。
在报告中定义一个新参数,并将其命名为aux_gendername
。
在定义参数时,调整其默认值表达式。
($P{gendername}.equals("") || $P{gendername}==NULL? " " : " and gender_id = '"+$P{gendername}+"'")
然后在主查询中,使用辅助参数而不是实际参数($ P {gendername})。
SELECT * FROM persontable WHERE 1=1 $P!{aux_gendername}
如果$ P {gendername}包含任何值并且条件将动态地附加到查询,否则整个结果集将显示在报表中而不进行任何过滤。
注意 :必须在辅助参数中使用!。