2010-10-07 10 views
11

Istnieje sposób użycia pola obliczeniowego w klauzuli where?Istnieje sposób użycia pola obliczeniowego w klauzuli where?

chcę zrobić coś jak

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 
; 

ale mam ORA-00904: "całkowita": nieprawidłowy identyfikator.

Więc muszę używać

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 
; 

Odpowiedz

31

Logicznie klauzula select jest jednym z ostatnich częściach zapytania oceniane, więc aliasy i kolumny pochodne nie są dostępne. (. Z wyjątkiem order by, który logicznie zdarza ostatni)

Korzystanie tabelę pochodzącą znajduje się w odległości około to:

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 
; 
+0

można również użyć CTE. – onedaywhen

+1

Próbowałem tego w procedurze przechowywanej i powyższa składnia nie działałaby, chyba że również aliasy pochodnej tabela, jak również. – DilbertDave

+0

@DilbertDave, interesujące. Próbowałeś w Oracle? Jeśli dobrze pamiętam, SQL Server zawsze wymagał aliacji tabel pochodnych. –

Powiązane problemy