编写查询的更好方法

时间:2017-04-07 15:20:21

标签: sql postgresql join view

我在加入表格和视图后创建了一个视图。 视图包含连接中的一些实际列,其中一些是计算列(让我们称之为type1)。其中一些是计算列(type2)的计算。 有没有什么方法可以引用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

2 个答案:

答案 0 :(得分:1)

,你不能。您可以再次使用整个表达式(或)使用子查询,并在外部查询中引用列名称

答案 1 :(得分: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