sql&oracle中case语句中多参数的处理

yftpprvb  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(300)

我正在使用oracle查询。我卡在我的查询,这是非常类似于下面的代码/条件。我有多个条件,基于这些条件,具有多个值的条件应按如下方式传递。
条款:
第一季度
第二季度
上半场

  1. MONTHS IN (CASE WHEN terms = 'First Quarter' THEN ('JAN','FEB','MAR')
  2. WHEN terms = 'Second Quarter' THEN ('APR','MAY','JUN')
  3. WHEN terms = 'First Half' THEN ('JAN','FEB','MAR','APR','MAY','JUN')
  4. ELSE ('JUL','AUG','SEP','OCT','NOV','DEC')
  5. END )

当我执行上述相同的查询时,错误消息显示为ora-00907-missing right paranthesis,我找不到原因。
请提供有关修复和性能方面的建议,因为我在原始查询中有多个条件。
提前谢谢。

r7knjye2

r7knjye21#

您可以使用布尔逻辑来描述您的条件,而不是 case 表达式:

  1. (terms = 'First Quarter' and months in ('JAN', 'FEB', 'MAR'))
  2. or (terms = 'Second Quarter' and months in ('APR', 'MAY', 'JUN'))
  3. or (terms = 'First Half' and months in ('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN'))

这可以缩短一点:

  1. (terms in ('First Quarter', 'First Half') and months in ('JAN', 'FEB', 'MAR'))
  2. or (terms in ('Second Quarter', 'First Half') and months in ('APR', 'MAY', 'JUN'))
gab6jxml

gab6jxml2#

这里有一个选择;第1-8行的样本数据。您可能感兴趣的查询从第9行开始。取决于你用什么工具, '&&terms' 可能看起来与此不同(例如。 :terms ). 这是sql*plus。而且,我用缩写代替了你的“四分之一”之类的东西(我不想打那么多)。

  1. SQL> with months (mon, num) as
  2. 2 (select 'jan', 1 from dual union all
  3. 3 select 'feb', 2 from dual union all
  4. 4 select 'mar', 3 from dual union all
  5. 5 select 'apr', 4 from dual union all
  6. 6 select 'may', 5 from dual union all
  7. 7 select 'jun', 6 from dual
  8. 8 )
  9. 9 select *
  10. 10 from months
  11. 11 where mon in
  12. 12 (select *
  13. 13 from table(sys.odcivarchar2list('jan', 'feb', 'mar'))
  14. 14 where '&&terms' = 'FQ'
  15. 15 union all
  16. 16 select *
  17. 17 from table(sys.odcivarchar2list('apr', 'may', 'jun'))
  18. 18 where '&&terms' = 'SQ'
  19. 19 union all
  20. 20 select *
  21. 21 from table(sys.odcivarchar2list('jan', 'feb', 'mar', 'apr', 'may', 'jun'))
  22. 22 where '&&terms' = 'FH'
  23. 23 )
  24. 24 order by num;
  25. Enter value for terms: SQ
  26. MON NUM
  27. --- ----------
  28. apr 4
  29. may 5
  30. jun 6

--

  1. SQL> undefine terms
  2. SQL> /
  3. Enter value for terms: FH
  4. MON NUM
  5. --- ----------
  6. jan 1
  7. feb 2
  8. mar 3
  9. apr 4
  10. may 5
  11. jun 6
  12. 6 rows selected.
  13. SQL>
展开查看全部

相关问题