Utilizzare un campo calcolato nella clausola WHERE
Domanda
C'è un modo per utilizzare un campo calcolato nella clausola where
?
Io voglio fare qualcosa di simile
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
;
ma ottengo ORA-00904: "TOTAL": invalid identifier
.
Quindi devo usare
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
;
Soluzione
Logicamente , la clausola select
è una delle ultime parti di una query valutata, così gli alias e colonne derivate non sono disponibili. (Tranne che per order by
, che logicamente accade ultima.)
Utilizzo di una tabella derivata è lontano intorno a questo:
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
;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow