2017-04-07 88 views
0

我在加入表和視圖後創建視圖。 該視圖包含連接中的一些實際列,其中一些列是計算列(讓我們稱它們爲type1)。其中一些是計算列(類型2)的計算。 有沒有什麼辦法可以引用type1列來計算type2而不是再次編寫整個代碼? (我不想創建另一個子查詢),只是檢查是否有任何有效的方法來編寫代碼。這裏不張貼實際的代碼,這是我想要做的簡稱:編寫查詢的更好方法

Create view ABCD 
    col1,col2 , calc_col1, calc_col2 , Calc_col3 
    as 
    select a.col1 as col1 , 
      a.col2 as col2, 
      case when some_calulations then 2 else 0 end as calc_col1, 
      (case when some_calulations then 2 else 0 end) - a.somecol as calc_col2 , 
     ((case when some_calulations then 2 else 0 end) - a.somecol) + 5)as calc_col3 
from Table1 as a 
    left join view2 as b 
    on join_condition 
+0

你可以把它寫在所需的值傳遞的「某些值的函數「但這似乎是低效的執行,但更容易維護。 – xQbert

回答

1

使用lateral subqueries

select 
    a.col1 as col1, 
    a.col2 as col2, 
    c.calc_col1, 
    d.calc_col2, 
    d.calc_col2 + 5 as calc_col3 
from 
    Table1 a 
    left join 
    view2 b on join_condition 
    cross join lateral 
    (select case when some_calulations then 2 else 0 end as calc_col1) c 
    cross join lateral 
    (select calc_col1 - a.somecol as calc_col2) d 
+0

謝謝,這是非常有幫助的! – puzeledbysql

1

NO,你不能。要麼你再次使用整個表達式(或)使用子查詢,並在你的外部查詢引用的列名