2016-07-11 10 views
-1

Ich versuche, eine Where-Klausel in einer Abfrage zu ändern, wie es eine kartesische Verknüpfung in der Landtabelle auf einem Oracle-Bericht erstellt. Die Problemlinie ist unten. Die Berichtsvariable: P_PAYMENT_SOC_NBR kann NULL, '052' oder '044' sein. Wenn: P_PAYMENT_SOC_NBR NULL ist, dann suche ich sowohl nach member.d_tax_country_id, member.d_mcps_tax_country_id als auch nach country_id in der Landtabelle.Oracle 11g SQL Case-Anweisung in Where-Klausel

Ich dachte an eine Fallanweisung in der Where-Klausel, aber ich bin stecken geblieben.

AND country.country_id = 
decode(:P_PAYMENT_SOC_NBR, NULL,country.country_id,'052', 
     member.d_tax_country_id,member.d_mcps_tax_country_id) 

Alle Ideen, was

Antwort

0
AND ((:P_PAYMENT_SOC_NBR = '052' and country.country_id = member.d_tax_country_id) 
    OR (:P_PAYMENT_SOC_NBR = '044' and country.country_id = member.d_mcps_tax_country_id) 
    OR (:P_PAYMENT_SOC_NBR is null and (country.country_id = member.d_tax_country_id OR country.country_id = member.d_mcps_tax_country_id))) 
+0

Hallo Vercelli, wenn P_PAYMENT_SOC_NBR NULL ist dann will ich nicht zurück in die country.country_id zu verbinden ich einen IN tun will (member.d_tax_country_id, member.d_mcps_tax_country_id) beiden Datensätze zu erhalten, wenn sie –

+0

@ShaunKinnair existieren vollständige Abfrage bitte – vercelli

+0

@ShaunKinnair Ich änderte es. Nein 'NVL2' nur' AND/OR/IS NULL' – vercelli

0

Ihre Anforderung zu tun, ist nicht ganz klar. Was passiert, wenn :P_PAYMENT_SOC_NBRnicht NULL ist? Aus Ihrer Beschreibung in Worten scheint es, dass Sie in diesem Fall keine weiteren Bedingungen überprüfen müssen. Wenn dies der Fall verwenden:

AND (:P_PAYMENT_SOC_NBR is not NULL 
    or country.country_id = member.d_tax_country_id 
    or country.country_id = member.d_mcps_tax_country_id -- or perhaps "and", not "or"?? 
    ) 

Wenn dies nicht das, was Sie gemeint, klären Sie bitte die Klar Englisch Beschreibung Ihrer Anforderung (eindeutig eine Abfrage, die nicht das tut, was Sie wollen, wird nicht viel helfen).

+0

Hi mathguy, Wenn p_payment_soc_nbr NULL ist, dann möchte ich sowohl für member.d_tax_country_id als auch member.d_mcps_tax_country_id gegen die country.country_id suchen. Also mache ich im Grunde eine IN-Anweisung (dh WENN: P_PAYMENT_SOC_NBR ist NULL UND country.country_id IN (member.d_tax_country_id, member.d_mcps_tax_country_id) –

+0

OK Was ist, wenn ': P_PAYMENT_SOC_NBR' ist ** nicht ** NULL? Was ich zeige in meiner Antwort wird folgendes tun: WENN: P_PAYMENT_SOC_NBR ist ** nicht ** NULL, dann prüft es nicht auf zusätzliche Bedingungen.Wenn es jedoch NULL ist, dann überprüft es, ob 'country.country_id' gleich eins ist oder die andere Landes-ID aus der 'member'-Tabelle, genau das, was Sie angefordert haben. – mathguy