【问题标题】:PLSQL Conditional rulesPLSQL 条件规则
【发布时间】:2018-11-01 14:31:53
【问题描述】:

需要条件规则:

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,

【问题讨论】:

  • 欢迎来到stackoverflow。请花一分钟时间收听tour,尤其是如何How to Ask。请确定您使用的是 SQL Server 还是 Oracle,因为它们是使用两种不同 sql 方言的两种不同产品,edit 您的问题相应。
  • 了解更多上下文可能会有所帮助,尤其是在返回全部方面
  • 能否请您发布您尝试过的内容,以免我们重复?
  • 对不起,如果为NULL,那么A B 和C 的所有数据都将返回,但货币为ABC
  • @JonTout 更新

标签: sql oracle plsql case sqlplus


【解决方案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 年了。

【讨论】:

  • 完美运行,现在使用它。非常感谢
【解决方案2】:

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

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

【讨论】:

  • @mfgn 在COJ.CURRENCY_CODE IS COJ.CURRENCY_CODE = 之后按原样使用
猜你喜欢
  • 2017-04-05
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 2011-10-02
相关资源
最近更新 更多