我正在尝试修改查询中的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)
关于该怎么做的任何想法
答案 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"??
)
如果这不是你的意思,请澄清你的要求的简明英文描述(显然,一个没有做你想做的查询也无济于事。)