Quando tento executar esta SELECT
instrução, recebo este erro: ORA-00904: "GPASCORE": invalid identifier
. Como uso o resultado da gpaScore
CASE
instrução na WHERE
cláusula?
SELECT
(CASE grade
WHEN 'A+'
THEN 4
WHEN 'A'
THEN 4
WHEN 'A-'
THEN 3.7
WHEN 'B+'
THEN 3.3
WHEN 'B'
THEN 3
WHEN 'B-'
THEN 2.7
WHEN 'C+'
THEN 2.3
WHEN 'C'
THEN 2
WHEN 'C-'
THEN 1.7
WHEN 'D+'
THEN 1.3
WHEN 'D'
THEN 1
WHEN 'D-'
THEN 0.7
WHEN 'F'
THEN 0
ELSE NULL END) gpaScore
FROM PGFINALGRADES
WHERE gpaScore = 3
O problema é que o Oracle avalia o
SELECT
depois daWHERE
cláusula .Você pode colocar sua consulta em uma subseleção:
Ou você pode replicar a
CASE
declaração naWHERE
cláusula:Ou, se o seu caso real for tão simples quanto este, você pode colocar
grade
em suaWHERE
cláusula:Você não pode usar um alias de coluna na cláusula where. Você pode fazer o seguinte: usar sua consulta original como uma subconsulta.
Além da solução de Balázs, você também pode fazer coisas bacanas com CTEs (Common Table Expressions - também conhecido como cláusula WITH). Dê uma olhada no que eu fiz abaixo e você deve ser capaz de adaptá-lo. Você pode usar o resultado do seu SQL da maneira que quiser. Este código funciona no PostgreSQL (sem instância do Oracle em execução), mas deve funcionar no Oracle.
Agora, seleciono da tabela de teste (usei apenas alguns registros de amostra):