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
;
Était-ce utile?

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
scroll top