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

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
;
InformationsquelleAutor Luc M | 2010-10-07

1 Comentario

  1. 34

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

    El uso de una tabla derivada es lejos de todo esto:

    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 
    ; 
    • También podría usar una CTE.
    • Yo estaba tratando de esto en un Procedimiento Almacenado y la sintaxis anterior no funcionaría a menos que yo con el alias de la tabla derivada así.
    • interesante. Estaba tratando de Oracle? Si recuerdo correctamente, SQL Server siempre se requiere derivados de las tablas de alias.
    • No Oracle, SQL 2005 – con un tabloe alias funcionaba bien.
    • OP estaba preguntando acerca de Oracle que no necesita el alias. Me alegro de que esta respuesta fue capaz de ayudar a ti a pesar de que era para una plataforma diferente.
    • Ah – acabo de notar el mensaje de error de Oracle y las etiquetas de rubor. Aún así, me señaló en la dirección correcta para upvote 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here