Utiliser un champ calculé dans la clause where
Question
Y at-il un moyen d'utiliser un champ calculé dans la clause where
?
Je veux faire quelque chose comme
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
;
mais je reçois ORA-00904: "TOTAL": invalid identifier
.
Je dois utiliser
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
;
La solution
Logiquement , la clause de select
est l'une des dernières parties d'une requête évaluée, de sorte que les alias et les colonnes dérivées ne sont pas disponibles. (À l'exception de order by
, qui logiquement arrive dernier.)
En utilisant une table dérivée se trouve autour de ceci:
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
;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow