gpt4 book ai didi

sql - 使用 case 在 where 子句中的两个句子之间进行选择 (Oracle)

转载 作者:行者123 更新时间:2023-12-04 15:58:23 25 4
gpt4 key购买 nike

我正在创建一个函数,我需要根据参数值 (PTIPO) 在两个句子之间进行选择

下面是我的代码

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 = pcajaid AND(
CASE WHEN(PTIPO = 2) --this is what causes the issue.
THEN
b.cod_compro = ncompini OR (b.fecha_mov BETWEEN pfecha_ini AND pfecha_fin)
ELSE
b.cod_compro != ncompini AND b.fecha_mov BETWEEN pfecha_ini AND pfecha_fin
END);

错误是“缺少关键字”,但我知道问题出在最后一个 CASE 上。我还能如何在句子之间进行选择。这种情况是正确的方法还是我应该使用其他声明?

最佳答案

case 可以返回一个值,但不能返回一个表达式。这应该可以解决问题,尽管我觉得它甚至可以更简单:

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 = pcajaid AND
(
(PTIPO = 2 and (b.cod_compro = ncompini OR b.fecha_mov BETWEEN pfecha_ini AND pfecha_fin))
OR
(PTIPO <> 2 and (b.cod_compro != ncompini AND b.fecha_mov BETWEEN pfecha_ini AND pfecha_fin))
)

关于sql - 使用 case 在 where 子句中的两个句子之间进行选择 (Oracle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com