如果情况在箱内

Ale*_*das 4 mysql sql oracle oracle11g

我正在将一些MySQL 5.0函数转换为Oracle 11g。

我需要IF在一个盒子里放一个错误,但出现错误(缺少正确的括号),这是我的代码

SELECT SUM(
    CASE PTIPO
      WHEN 0 THEN (SELECT IF(A.NT = 0) THEN A.VALOR ELSE 0 END IF FROM DUAL)
      WHEN 1 THEN (SELECT IF(A.NT = 1) THEN A.VALOR ELSE 0 END IF FROM DUAL)
      WHEN 2 THEN (SELECT IF(A.NT = 1) THEN A.VALOR ELSE -A.VALOR END IF FROM DUAL)
    END)
INTO nresp
FROM mov_caja a
JOIN enc_movp b ON a.docid = b.docid
JOIN c_caja c ON a.cajaid = c.cajaid
WHERE c.cajaid
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 5

IF / ELSE 用于函数内部功能和准备好的语句的流控制,而不是用于在单个语句中组合条件。

确实,您只需要CASE使用另一种语法格式在另一个内部嵌套CASE WHEN <condition> THEN <value>

SELECT SUM(
    CASE PTIPO
      WHEN 0 THEN (CASE WHEN (A.NT = 0) THEN A.VALOR ELSE 0 END)
      WHEN 1 THEN (CASE WHEN (A.NT = 1) THEN A.VALOR ELSE 0 END)
      WHEN 2 THEN (CASE WHEN (A.NT = 1) THEN A.VALOR ELSE -A.VALOR END)
    END)
INTO nresp
FROM mov_caja a
JOIN enc_movp b ON a.docid = b.docid
JOIN c_caja c ON a.cajaid = c.cajaid
WHERE c.cajaid
Run Code Online (Sandbox Code Playgroud)