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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM