2013-07-29 3 views
0

J'ai une requête comme ci-dessousy compris une condition dynamique basée sur une autre condition

select -------- 
from table a 
left outer join ....c 
where 
(a.column='123') and (c.column='456') 

Je voudrais

comprennent "(c.column = '456')" que lorsque (a .column = '123') n'est pas nul

Comment faire cela dans une seule requête? ou dois-je écrire deux requêtes distinctes?

+0

Quels rdbms utilisez-vous? – StevieG

+0

rdbms J'utilise est oracle – Techie

+0

est une colonne nullable? –

Répondre

0

devrait être assez simple:

select -------- 
from table 
left outer join.... 
where (Condition A IS NULL) OR (condition A AND condition B) 

MISE À JOUR: Pour vos conditions:

where (a.column is null) or (a.column='123' and c.column='456') 

Il comprendra une suite si elle est a.column est nulle ou si bot a.column et c.column ont des valeurs valides.

+0

Mes deux conditions sont comme (a.column = '123') et (c.column = '456') – Techie

+0

ma requête ne possède pas seulement ces deux conditions mais aussi d'autres conditions – Techie

+0

Réponse mise à jour pour votre condition. La même chose devrait s'appliquer aux autres. –

0

Si je comprends bien votre exigence est ce que vous voulez sql

select distinct cm.credit_amt,e.credit_lifetime,e.credit_desc,e.icom_code,e.entry_hint, 
       e.credit_id,e.credit_type_id,e.recontract_period,a.class_desc,a.offer_id, 
       a.offer_class_id 
from rti_retention.package a 
left outer join rti_retention.offer_class_credit b on (a.offer_id=b.offer_id 
                 and a.offer_class_id=b.offer_class_id 
                 and a.customer_type_id=b.customer_type_id) 
left outer join rti_retention.credit_pre_bundle c on (b.credit_id=c.credit_id) 
left outer join rti_retention.credit e on (c.credit_id=e.credit_id) 
left outer join rti_retention.credit_mix_amount cm on (cm.credit_id=c.credit_id and cm.prod_mix_id=a.prod_mix_id) 
where a.offer_class_id not in (1,2,16) 
and a.channel_id=5 and a.customer_type_id=1 
and a.offer_id='6055' 
and c.prod_mix_id = case when (select count(*) 
           from rti_retention.credit_pre_bundle c1 
           where c1.prod_mix_id='1000') > 1 then '1000' else c.prod_mix_id end 
and e.icom_code is not null 

quelque temps, il y aura des erreurs de syntaxe SQL. En raison de ma base de données complète, j'ai écrit sql à l'esprit. Je ne peux pas le tester.

+0

Merci pour la réponse ... Je me suis trompé dans mon exigence ... désolé – Techie

Questions connexes