PLSQL条件规则

时间:2018-11-01 14:31:53

标签: sql oracle plsql case

需要的条件规则:

IF 
A then currency = ABC
B then currency = ABD
C then currency = ABE
NULL = Returns data from A, B and C but it's currency is ABC

尝试实现此逻辑,我尝试使用3个单独的CASE语句,但这似乎不起作用。任何帮助表示赞赏

我目前所拥有的:

(尝试了一些变化)

 CASE
             WHEN '&SITE' IS 'A' THEN
                COJ.CURRENCY_CODE IS 'ABC'
         END A,
         CASE
             WHEN '&SITE' IS 'B' THEN
                COJ.CURRENCY_CODE IS 'ABD'
         END B,
         CASE
             WHEN '&SITE' IS NULL 'C' THEN
                COJ.CURRENCY_CODE IS 'ABE'
         END C,

2 个答案:

答案 0 :(得分:1)

您应该坚持使用case表达式:

(CASE WHEN '&SITE' = 'A' THEN 'ABC'
      WHEN '&SITE' = 'B' THEN 'ABD'
      WHEN '&SITE' = 'C' THEN 'ABE'
      ELSE 'ABC'
 END) as currency_code

或者:

(CASE '&SITE' WHEN 'A' THEN 'ABC'
              WHEN 'B' THEN 'ABD'
              WHEN 'C' THEN 'ABE'
              ELSE 'ABC'
 END) as currency_code

CASE是标准SQL,可在所有数据库中使用,大多数人发现它更加清晰。 DECODE()是在使用标准功能之前实施的定制Oracle代码。 CASE在Oracle中已经使用20年了。

答案 1 :(得分:0)

使用decode function作为if语句,只有B和C产生不同的值,然后才是默认值:

 decode(x, 'B', 'ABD', 'C', 'ABE','ABC')