2013-10-04 140 views
36

我希望你能幫助解決這個問題。我使用的Oracle SQL(此觀點SQL開發人員)......如何使用計算列來計算同一視圖中的另一列

如果我有下面的表:

  • ColumnA(數字)
  • ColumnB(數字)
  • ColumnC (數字)

在我看來,我有

Select 
ColumnA, 
ColumnB, 
ColumnA + ColumnB As calccolumn1 

現在,在這一點上,我想用calccolumn1 但我不能隨便說......

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

我假設我需要某種類型的subquery..but這是我需要你的幫助...... 我怎樣才能查詢這個查詢,以便我可以在同一查詢中的另一個計算中使用calccolumn1?它可能是一個If或者Case,但底線是一些派生數。

+1

有什麼理由不只是做'(ColumnA + ColumnB)/ ColumnC作爲calccolumn2 '? –

+1

我同意......在這個簡單的例子中,這將工作得很好。我試圖理解如何格式化一個簡單的例子來適用於更復雜的例子...所以如果ColumnA是一個複雜的Case When語句和ColumnB也......那麼如果我想將它們合併到產生calccolumn1,然後用於calccolumn2。我只是簡單地將(A)中的列A的整個Case狀態和B中的相同並添加它們? – Ewaver

回答

21

你可以使用一個嵌套查詢:

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

與價值觀34,給出了一個排,5

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

你也可以重複第一次的計算,除非它是真的做一些昂貴的東西(通過函數調用,說):

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

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

你必須包括你的計算列表達式:

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

或者你可以創建一個存儲過程來輸出列calcolumn1 – swirlingsara

1

你可以做到這一點使用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