Mysql 如果箱子内有条件

Mysql 如果箱子内有条件,mysql,sql,oracle,oracle11g,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)

我正在将一些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

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

实际上,您只需要使用另一种语法格式
CASE将另一个
CASE
嵌套在其中,然后

您可以将其改写为:

SELECT SUM(
    CASE 
      WHEN PTIPO = 0 and A.NT  = 0 THEN A.VALOR 
      WHEN PTIPO = 0 and A.NT <> 0 THEN 0
      WHEN PTIPO = 1 and A.NT  = 1 THEN A.VALOR 
      WHEN PTIPO = 1 and A.NT <> 1 THEN 0
      WHEN PTIPO = 2 and A.NT  = 1 THEN A.VALOR 
      WHEN PTIPO = 2 and A.NT <> 1 THEN -A.VALOR 
    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
选择SUM(
案例
当PTIPO=0且A.NT=0时,则A.VALOR
当PTIPO=0且A.NT为0时,则为0
当PTIPO=1且A.NT=1时,则A.VALOR
当PTIPO=1且A.NT为1时,则为0
当PTIPO=2且A.NT=1时,则A.VALOR
当PTIPO=2和A.NT 1时,则-A.VALOR
(完)
进入NREP
来自mov_caja a
在a.docid=b.docid上连接enc_movp b
在a.cajaid=c.cajaid上加入c_caja c
卡贾德在哪里

De nada,亚历杭德罗。你的父母是谁
SELECT SUM(
    CASE 
      WHEN PTIPO = 0 and A.NT  = 0 THEN A.VALOR 
      WHEN PTIPO = 0 and A.NT <> 0 THEN 0
      WHEN PTIPO = 1 and A.NT  = 1 THEN A.VALOR 
      WHEN PTIPO = 1 and A.NT <> 1 THEN 0
      WHEN PTIPO = 2 and A.NT  = 1 THEN A.VALOR 
      WHEN PTIPO = 2 and A.NT <> 1 THEN -A.VALOR 
    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