有时需要一个计算列,该列的数据由别的列的数据计算得出。 如:select field1, field2, field1+field2
from table1第三列是计算列。但如果计算列需要从取了别名的列计算得出,就不能直接使用:select .... ,  sum(count1) "count1", sum(count2) "count2" , "count1"+"count2"
from table1这样的sql会执行提示出错。 需要改成下面的形式,才可以执行:select a."count1", a."count2", a."count1"+a."count2"
from
(select .... ,  sum(count1) "count1", sum(count2) "count2"
from table1)
别名列好像前面一定要加上表名前缀才可以出现在计算列里面啊。  
有没有什么解决方法, 这样好麻烦啊。

解决方案 »

  1.   

    select .... ,  sum(count1) "count1", sum(count2) "count2" , count1+count2 as "count1+count2"from table1
    or
    select .... ,  sum(count1) "count1", sum(count2) "count2" , sum(count1) +sum(count2)as "count1+count2"
    试试看
      

  2.   

    select .... ,  sum(count1) "count1", sum(count2) "count2" , sum(count1)+sum(count2) "count1+count2"
    from table1
      

  3.   

    lizhaogui() 的做法是对的,我的回晚了,删不了了,sign
      

  4.   

    楼主,不是别名的关系;是group by 的时候,select 的字段除了group by后面的字段外,都得用sum/count,才能执行通过的。字段直接相加肯定是出错了。
      

  5.   

    在给列定义别名的时候,别名不能在当层语句中使用。
    例如:select id iidd from a where iidd=1是错误的,应该select id iidd from a where id=1sum后面不一定要跟group by的
    例如:select sum(id),sum(aa),sum(bb),sum(aa+bb),sum(aa)+sum(bb) from a都是可以的
      

  6.   

    提醒一下~~~~~~~~~~~~~~~~~~
    sum后面是不一定要跟GROUP BY
    但是如果是:select id,sum(id) from a
    以及select id,count(id) from a
    以及select id,max(id) from a
    就不行了!如果想不用GROUP BY,就用
    select id,sum(id)over() from a
    以及select id,count(id)over() from a
    以及select id,max(id)over() from a()中可以不写,至于写什么就看自己的处理了.
      

  7.   

    注明一下, 我写的sum只是一个例子。 就是比如说,有两个列A,B, 是很长的时候,就都取一个别名,然后又有一个计算列B,要从A和B相加得到结果。  因为A、B列都很长, 不能直接用A、B的列的内容相加,而是要用别名相加。  但是发现不可以。 如下:select decode( a.costcode,......) "A" , decode(b.costcode .....) "B",  "A"+"B"
    from .......waterfirer(水清) 应该是对的: 
    在给列定义别名的时候,别名不能在当层语句中使用。所以我用另外一个写法就可以了,因为别名已经用在了上一层。
    select a."count1", a."count2", a."count1"+a."count2"
    from
    (select .... ,  sum(count1) "count1", sum(count2) "count2"
    from table1)那这样说没有比较好的解决方法了。 只有把查询结果作为一个结果集再次查询一次。