我有一个简单的问题,但找不到解决方案。我需要:
WHERE
(tableABC.name = (DECODE (:p_type,'Morning', 'GOODMORNING',
'Afternoon', 'GOODAFTERNOON',
'Day', IN('GOODMORNING','GOODAFTERNOON'))
不幸的是,它不起作用。我不能使用任何其他表格,因为它用于报表中并且“ Morning,Afternoon,Day”是虚构的单词(它应该是用户友好的)。秒数确实存在于表格中,但此列还有许多下一个值(例如:“ GOODEVENING”,“ GOODNIGHT”)。 我只需要从特定列中选择两个值,并在“天”选项下选择许多不同的值即可。
非常感谢, D。
答案 0 :(得分:2)
您不能像这样将比较条件从=
更改为IN
。您可以通过切换为使用简单的布尔逻辑来实现您的目标:
WHERE (:p_type = 'Morning' AND tableABC.name = 'GOODMORNING')
OR (:p_type = 'Afternoon' AND tableABC.name = 'GOODAFTERNOON')
OR (:p_type = 'Day' AND tableABC.name IN ('GOODMORNING', 'GOODAFTERNOON'))
如果您有其他条件,请另外加上括号将整个内容括起来:
WHERE ((:p_type = 'Morning' AND tableABC.name = 'GOODMORNING')
OR (:p_type = 'Afternoon' AND tableABC.name = 'GOODAFTERNOON')
OR (:p_type = 'Day' AND tableABC.name IN ('GOODMORNING', 'GOODAFTERNOON')))
AND <something else>
答案 1 :(得分:0)
请勿使用decode()
。甚至不要使用case
。只需将其表示为布尔逻辑即可:
WHERE (:p_type = 'Morning' AND tableABC.name = 'GOODMORNING') OR
(:p_type = 'Afternoon' AND tableABC.name = 'GOODAFTERNOON') OR
(:p_type = 'Day' AND tableABC.name IN ('GOODMORNING', 'GOODAFTERNOON'))