解码Oracle SQL中的多个值

解码Oracle SQL中的多个值,sql,oracle,where,decode,Sql,Oracle,Where,Decode,我有一个简单的问题,但我找不到解决办法。我需要: WHERE (tableABC.name = (DECODE (:p_type,'Morning', 'GOODMORNING', 'Afternoon', 'GOODAFTERNOON', 'Day', IN('GOODMORNING','GOODAFTERNOON')) 不幸的是,它不起作用。我不能使用任何

我有一个简单的问题,但我找不到解决办法。我需要:

WHERE
(tableABC.name = (DECODE (:p_type,'Morning', 'GOODMORNING',
                                  'Afternoon', 'GOODAFTERNOON',
                                  'Day', IN('GOODMORNING','GOODAFTERNOON'))
不幸的是,它不起作用。我不能使用任何其他表格,因为它是在报告中使用的,“早上,下午,天”是想象中的单词(它应该是用户友好的)。表中确实存在秒数,但此列还有许多下一个值(例如:“Goodwillight”、“Goodwillight”)。 我只需要从特定列中选择两个具有许多不同值的值,这些值将在“日”选择下选择

非常感谢,
D. < /P> < P>在中间,你不能把比较条件从<代码>=< /代码>改为<代码>。您可以通过切换到仅使用简单布尔逻辑来实现您的目标:

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'))
如果您有其他条件,则使用一组额外的括号将整个内容括起来:

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>
WHERE(:p_type='Morning'和tableABC.name='GOODMORNING')
或者(:p_type='detainy'和tableABC.name='gooddetainy')
或者(:p_type='Day'和tableABC.name IN('GOODMORNING','good午后'))
及

< /代码> 您不能将中间条件从<代码> >代码> > <代码> >中间。您可以通过切换到仅使用简单布尔逻辑来实现您的目标:

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'))
如果您有其他条件,则使用一组额外的括号将整个内容括起来:

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>
WHERE(:p_type='Morning'和tableABC.name='GOODMORNING')
或者(:p_type='detainy'和tableABC.name='gooddetainy')
或者(:p_type='Day'和tableABC.name IN('GOODMORNING','good午后'))
及
不要使用
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 (: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'))
不要使用
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 (: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'))

你的问题不清楚。。更新..并添加适当的数据样本。预期结果您的问题不清楚。。更新..并添加适当的数据样本。以及预期结果