Pregunta

¿Hay una manera de utilizar un campo calculado en la cláusula where?

Quiero hacer algo como

SELECT a, b, a+b as TOTAL FROM (
   select 7 as a, 8 as b FROM DUAL
   UNION ALL
   select 8 as a, 8 as b FROM DUAL
   UNION ALL
   select 0 as a, 0 as b FROM DUAL
)
WHERE TOTAL <> 0
;

pero me da ORA-00904: "TOTAL": invalid identifier.

Así que tengo que usar

SELECT a, b, a+b as TOTAL FROM (
   select 7 as a, 8 as b FROM DUAL
   UNION ALL
   select 8 as a, 8 as b FROM DUAL
   UNION ALL
   select 0 as a, 0 as b FROM DUAL
)
WHERE a+b <> 0
;
¿Fue útil?

Solución

Lógicamente , la cláusula select es una de las últimas partes de una consulta evaluado, por lo que los alias y columnas derivados no están disponibles. (Excepto para order by, que lógicamente sucede última.)

Uso de una tabla derivada es de distancia alrededor de este:

select * 
from (SELECT a, b, a+b as TOTAL FROM ( 
           select 7 as a, 8 as b FROM DUAL 
           UNION ALL 
           select 8 as a, 8 as b FROM DUAL 
           UNION ALL 
           select 0 as a, 0 as b FROM DUAL) 
    )
WHERE TOTAL <> 0 
; 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top