在select语句中是否可以使用if语句?
我不能用这个案例陈述。实际上,我使用的是iReport,我有一个参数。我想要做的是,如果用户不输入某个参数,它将选择所有实例。
例如,引用性别表的人员表,带有where子句参数的查询如下:
SELECT * FROM persontable WHERE gender_id = $P{genderName}:numeric如果参数$P{genderName}为空或空,那么它将选择all。我尝试了这个查询:
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)但它将返回一个错误“返回多一行.”我想是因为案件陈述。我该怎么做?
发布于 2012-11-10 07:45:09
试试这个:
SELECT * FROM persontable
WHERE gender_id = $P{genderName} OR $P{genderName} IS NULL 发布于 2012-12-07 12:11:10
使用辅助参数可以很容易地实现这一点。
在报表中定义一个新参数,调用它,aux_gendername。
在定义参数时,调整其默认值表达式。
($P{gendername}.equals("") || $P{gendername}==NULL? " " : " and gender_id = '"+$P{gendername}+"'")然后,在主查询中,使用辅助参数代替实际参数($P{性别名称})。
SELECT * FROM persontable WHERE 1=1 $P!{aux_gendername}如果$P{性别名称}包含任何值,并且条件将动态地附加到查询,则整个结果集将显示在报表中,无需任何筛选。
注意事项:使用!在辅助参数中是强制性的。
https://stackoverflow.com/questions/13320233
复制相似问题