現在有個需求:
篩選框為應返機構,如果項目為拍賣項目,那么篩選框的應返機構需要匹配拍賣項目的應返機構字段值;如果項目為非拍賣項目,那么篩選框的應返機構需要匹配非拍賣項目的代理機構的字段值。其中拍賣項目和非拍賣項目保存在同一個表里面,用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