oracle数据库查询通过一个待查询字段的值组装不同的条件

现在有个需求:

筛选框为应返机构,如果项目为拍卖项目,那么筛选框的应返机构需要匹配拍卖项目的应返机构字段值;如果项目为非拍卖项目,那么筛选框的应返机构需要匹配非拍卖项目的代理机构的字段值。其中拍卖项目和非拍卖项目保存在同一个表里面,用isAuction来区分,如果isAuction == 1则为拍卖项目,否则为非拍卖项目。

实现的sql(利用decode):

select uuid,
  isAuction,
  backMoney_total,
  backMoney_currencyType,
  backagent,
  agentname,
  decode(isAuction, 1, backAgent, agentname)
from spfeetradeback
where ((decode(isAuction, NULL, 1, 0) = 0) or agentname like '%天同证券%')
  and ((decode(isAuction, NULL, 1, 0) = 1) or backAgent like '%天同证券%');

天同证券是筛选框的值

如果项目为拍卖项目,那么(decode(isAuction, NULL, 1, 0) = 0) 为true,则忽略后面的“or agentname like '%天同证券%'”,而(decode(isAuction, NULL, 1, 0) = 1)为false,则执行“backAgent like '%天同证券%'”。所以当项目为拍卖项目的时候,上面的sql就相当于:

select uuid,
  isAuction,
  backagent,
  agentname,
  decode(isAuction, 1, backAgent, agentname)
from spfeetradeback
where backAgent like '%天同证券%';

如果是非拍卖项目,那么(decode(isAuction, NULL, 1, 0) = 0)为false,则执行“agentname like '%天同证券%'”,而(decode(isAuction, NULL, 1, 0) = 1)为true,则忽略“backAgent like '%天同证券%'”。所以当项目为非拍卖项目的时候,上面的sql就相当于:

select uuid,
  isAuction,
  backagent,
  agentname,
  decode(isAuction, 1, backAgent, agentname)
from spfeetradeback
where agentname like '%天同证券%';

                                                                                        ------>froest

转载于:https://www.cnblogs.com/God-froest/archive/2013/03/19/OracleDecode.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值