2016-07-11 116 views
-1

我試圖修改查詢中的where子句,因爲它在Oracle報表上的國家/地區表上創建笛卡爾連接。問題如下。該報告變量:P_PAYMENT_SOC_NBR可以爲NULL,「052」或「044」,如果:P_PAYMENT_SOC_NBR爲NULL,則我想做搜索都member.d_tax_country_id,對全國上表COUNTRY_ID member.d_mcps_tax_country_id。Oracle 11g SQL case語句在where子句中

我正在考慮where子句中的case語句,但我卡住了。

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) 

做什麼

回答

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

維切利嗨,如果P_PAYMENT_SOC_NBR爲NULL,則我不想加盟回到我想要做一個IN的country.country_id(member.d_tax_country_id,member.d_mcps_tax_country_id),如果他們存在 –

+0

@ShaunKinnair獲得兩個記錄請完整查詢 – vercelli

+0

@ShaunKinnair我改變了它。沒有'NVL2'只是'AND/OR/IS NULL' – vercelli

0

你要求任何的想法也不是很清楚。如果:P_PAYMENT_SOC_NBR而不是 NULL應該發生什麼?從你的文字描述來看,你似乎不需要在這種情況下檢查任何進一步的條件。如果是這樣使用:

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"?? 
    ) 

如果這不是你的意思,請說明您的需求的純英文說明(清楚,是不是做你想做也不會有多大效果什麼的查詢)。

+0

嗨mathguy,如果p_payment_soc_nbr爲NULL,則我想搜索兩個member.d_tax_country_id和member.d_mcps_tax_country_id對country.country_id。所以基本上我在做一個報表(即IF:P_PAYMENT_SOC_NBR爲null,並且country.country_id IN(member.d_tax_country_id,member.d_mcps_tax_country_id) –

+0

OK如果':?P_PAYMENT_SOC_NBR'是** **不是我NULL顯示什麼在我的答案中將做到以下幾點:IF:P_PAYMENT_SOC_NBR是**不是** NULL,那麼它不檢查任何附加條件。但是,如果它是NULL,那麼它檢查'country.country_id'是否等於1或來自「會員」表的國家ID的另一個;正是你所要求的。 – mathguy