解码 Oracle SQL 中的多个值
Multiple values in decode Oracle SQL
我有一个简单的问题,但找不到解决方案。我需要:
WHERE
(tableABC.name = (DECODE (:p_type,'Morning', 'GOODMORNING',
'Afternoon', 'GOODAFTERNOON',
'Day', IN('GOODMORNING','GOODAFTERNOON'))
不幸的是,它不起作用。我不能使用任何其他 table 因为它在报告中使用并且 "Morning, Afternoon, Day" 是想象的词(它应该是用户友好的)。秒确实存在于 table 中,但此列还有许多下一个值(例如:'GOODEVENING'、'GOODNIGHT')。
我只需要 select 来自具有许多不同值的特定列的两个值,这些值将在 "Day" selection.
下 selected
非常感谢,
D.
中间不能把比较条件从=
改成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>
不要使用 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'))
我有一个简单的问题,但找不到解决方案。我需要:
WHERE
(tableABC.name = (DECODE (:p_type,'Morning', 'GOODMORNING',
'Afternoon', 'GOODAFTERNOON',
'Day', IN('GOODMORNING','GOODAFTERNOON'))
不幸的是,它不起作用。我不能使用任何其他 table 因为它在报告中使用并且 "Morning, Afternoon, Day" 是想象的词(它应该是用户友好的)。秒确实存在于 table 中,但此列还有许多下一个值(例如:'GOODEVENING'、'GOODNIGHT')。 我只需要 select 来自具有许多不同值的特定列的两个值,这些值将在 "Day" selection.
下 selected非常感谢, D.
中间不能把比较条件从=
改成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>
不要使用 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'))