SQL语句如果语句在SELECT语句中

时间:2012-11-10 07:38:00

标签: postgresql select if-statement jasper-reports ireport

有没有办法可以在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声明。我怎么做?

2 个答案:

答案 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}包含任何值并且条件将动态地附加到查询,否则整个结果集将显示在报表中而不进行任何过滤。

注意 :必须在辅助参数中使用