我的代码中有这个问题,但我无法解决它
SELECT COUNT(0) AS CANT,
C.C06NOMBRE AS CONSOLIDADORA
FROM T07OBLIGACION A
JOIN T06EMPRESA B ON A.C07EMPRESA = B.C06IDEMPRESA AND A.C07CODSUCURSAL = B.C06CODSUCURSAL
JOIN T06EMPRESA C ON C.C06IDEMPRESA = B.C06IDPAGCON AND C.C06CODSUCURSAL = B.C06SUCURSALCON
WHERE
CASE
WHEN B.C06FECHACOR <= SYSDATE THEN
A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -2) AND A.C07FECHADE <= ADD_MONTHS(B.C06FECHACOR, -1) - 1
ELSE
A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -1) AND A.C07FECHADE <= B.C06FECHACOR - 1
END
GROUP BY C.C06NOMBRE
这会生成一个错误,显示“ERROR ORA-00908: MISSING KEYWORD”
看来错误是在表达式中发现的:
CASE
WHEN B.C06FECHACOR <= SYSDATE THEN
A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -2) AND A.C07FECHADE <= ADD_MONTHS(B.C06FECHACOR, -1) - 1
ELSE
A.C07FECHADE >= ADD_MONTHS(B.C06FECHACOR, -1) AND A.C07FECHADE <= B.C06FECHACOR - 1
END
我多次尝试调整这条线,但没有效果。你能帮我看看发生了什么事吗?
您错误地使用了 case 表达式;应该是这样的:
where a.C07FECHADE between case when b.C06FECHACOR <= sysdate then ADD_MONTHS(B.C06FECHACOR, -2)
else ADD_MONTHS(B.C06FECHACOR, -1)
end
and case when b.C06FECHACOR <= sysdate then ADD_MONTHS(B.C06FECHACOR, -1) - 1
else B.C06FECHACOR - 1
end