where子句中的Oracle 11g SQL case语句

时间:2016-07-11 16:52:43

标签: sql oracle case where

我正在尝试修改查询中的where子句,因为它在Oracle报表的国家/地区表上创建了一个笛卡尔连接。问题就在下面。报告变量:P_PAYMENT_SOC_NBR可以是NULL,'052'或'044',如果:P_PAYMENT_SOC_NBR为NULL,那么我想在country table上搜索member.d_tax_country_id,member.d_mcps_tax_country_id对country_id。

我在考虑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)   

关于该怎么做的任何想法

2 个答案:

答案 0 :(得分: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)))

答案 1 :(得分:0)

您的要求不是很清楚。如果:P_PAYMENT_SOC_NBR 为空,会发生什么?根据您的描述,在这种情况下,您似乎不需要任何其他条件进行检查。如果是这样,请使用:

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

如果这不是你的意思,请澄清你的要求的简明英文描述(显然,一个没有做你想做的查询也无济于事。)