2013-10-04 12 views
36

Mam nadzieję, że możesz pomóc w tym pytaniu. Używam Oracle SQL (SQL Developer dla tego widoku) ...Jak użyć kolumny obliczeniowej do obliczenia kolejnej kolumny w tym samym widoku

Jeśli mam tabelę z następującymi kolumnami:

  • Columna (liczba)
  • ColumnB (liczba)
  • ColumnC (Number)

moim zdaniem mam

Select 
ColumnA, 
ColumnB, 
ColumnA + ColumnB As calccolumn1 

Teraz w tym momencie chcę użyć calccolumn1 ale nie mogę po prostu powiedzieć ...

Select 
ColumnA, 
ColumnB, 
ColumnA + ColumnB As calccolumn1 
calccolumn1/ColumnC as calccolumn2 

jestem zakładając muszę jakiś rodzaj subquery..but to gdzie ja potrzebuję twojej pomocy ... Jak mogę sformułować zapytanie, aby móc użyć calccolumn1 w innym obliczeniu w ramach tego samego zapytania? Może to być If If lub Case when, ale bottomline to pewna liczba pochodna.

+1

Czy istnieje powód, aby nie tylko zrobić '(Columna + ColumnB)/ColumnC Jak calccolumn2 '? –

+1

Zgadzam się ... w tym uproszczonym przykładzie .. to działałoby dobrze. Próbowałem dojść do pojęcia, jak sformatować uproszczony przykład, aby zastosować go do bardziej złożonego ... tak, jeśli ColumnA był złożonym Case Case i ColumnB było również ... wtedy, gdy chcę je połączyć wyprodukuj calccolumn1, a później użyj do calccolumn2. Czy po prostu po prostu wstawiłbym cały stan Case dla kolumny A w() i taki sam dla B i dodałabym je? – Ewaver

Odpowiedz

21

Można użyć zagnieżdżone zapytanie:

Select 
    ColumnA, 
    ColumnB, 
    calccolumn1, 
    calccolumn1/ColumnC as calccolumn2 
From (
    Select 
    ColumnA, 
    ColumnB, 
    ColumnC, 
    ColumnA + ColumnB As calccolumn1 
    from t42 
); 

z rzędem z wartościami 3, 4, 5 który daje:

COLUMNA COLUMNB CALCCOLUMN1 CALCCOLUMN2 
---------- ---------- ----------- ----------- 
     3   4   7   1.4 

Można też po prostu powtórzyć pierwsze obliczenia, chyba że jest to naprawdę robienie czegoś kosztownego (przez wywołanie funkcji, powiedzmy):

Select 
    ColumnA, 
    ColumnB, 
    ColumnA + ColumnB As calccolumn1, 
    (ColumnA + ColumnB)/ColumnC As calccolumn2 
from t42; 

    COLUMNA COLUMNB CALCCOLUMN1 CALCCOLUMN2 
---------- ---------- ----------- ----------- 
     3   4   7   1.4 
6

Trzeba to wyrażenie dla kolumny obliczeniowej:

SELECT 
ColumnA, 
ColumnB, 
ColumnA + ColumnB AS calccolumn1 
(ColumnA + ColumnB)/ColumnC AS calccolumn2 
+0

Lub można utworzyć procedura składowana, aby wyświetlić kolumnę calcolumn1 – swirlingsara

1

Można to zrobić za pomocą cross join

Select 
    ColumnA, 
    ColumnB, 
    c.calccolumn1 As calccolumn1, 
    c.calccolumn1/ColumnC As calccolumn2 
from t42 
cross join (select (ColumnA + ColumnB) as calccolumn1) as c 
Powiązane problemy