首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL语句If语句在SELECT语句中

SQL语句If语句在SELECT语句中
EN

Stack Overflow用户
提问于 2012-11-10 07:38:00
回答 2查看 897关注 0票数 0

在select语句中是否可以使用if语句?

我不能用这个案例陈述。实际上,我使用的是iReport,我有一个参数。我想要做的是,如果用户不输入某个参数,它将选择所有实例。

例如,引用性别表的人员表,带有where子句参数的查询如下:

代码语言:javascript
复制
SELECT * FROM persontable WHERE gender_id = $P{genderName}:numeric

如果参数$P{genderName}为空或空,那么它将选择all。我尝试了这个查询:

代码语言:javascript
复制
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)

但它将返回一个错误“返回多一行.”我想是因为案件陈述。我该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2012-11-10 07:45:09

试试这个:

代码语言:javascript
复制
SELECT * FROM persontable 
WHERE gender_id = $P{genderName} OR $P{genderName} IS NULL 
票数 3
EN

Stack Overflow用户

发布于 2012-12-07 12:11:10

使用辅助参数可以很容易地实现这一点。

在报表中定义一个新参数,调用它,aux_gendername

在定义参数时,调整其默认值表达式。

代码语言:javascript
复制
($P{gendername}.equals("") || $P{gendername}==NULL? " " : " and gender_id = '"+$P{gendername}+"'")

然后,在主查询中,使用辅助参数代替实际参数($P{性别名称})。

代码语言:javascript
复制
SELECT * FROM persontable WHERE 1=1 $P!{aux_gendername}

如果$P{性别名称}包含任何值,并且条件将动态地附加到查询,则整个结果集将显示在报表中,无需任何筛选。

注意事项:使用!在辅助参数中是强制性的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13320233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档