第一个问题一个例子
select a,b,c,d from table 
我想让d的值等于(b+c)/a,但是我又不想在d的位置写得太长,有办法吗。比如 select sum(t.a+t.b) as A,sum(t.c+t.d) as B, A+B as C from t 
有没有这样类似的写法。
如果要写成select sum(t.a+t.b) as A,sum(t.c+t.d) as B, sum(t.a+t.b)+sum(t.c+t.d) as C from t 这样看这好麻烦======================
第二个问题查询结果如下
1    4.3    0.89623    
2    4.1    0.15136
3    3.6    0.36527
4    7.8    0.72619
我想的把第三列转换成百分比的形式,然后四舍五入。比如0.89623  变成89.62%============================================
第三个问题看第二个问题,一共是4行,我想在查询结果里再加一个第5 行
对每一列求,或是求平均。像EXCEL表格一样,能不能实现。注意:我是既要明细,也要汇总。不是只要一行汇总。看能不能实现。============================================
第四个问题
select sum(t.a+t.b) as A,sum(t.c+t.d) as B from t 
where sum(t.c+t.d)=9
group by .....
就是想在结果集中筛选出某一值等于9的行。更复杂点 where sum(t.c+t.d)+sum(t.c+t.d)=9
这样写不知道对不对。怎样写才能对。

解决方案 »

  1.   

    第一个问题-- 这样最简短
    select a,b,c,(b+c)/a 'd' from table  
      

  2.   

    第四个问题
    select sum(t.a+t.b) as A,sum(t.c+t.d) as B from t  
    where sum(t.c+t.d)=9
    group by .....
    不能将聚集函数放到where里,要在group by后面用having子句.
      

  3.   

     第二个问题:
    ltrim(cast(col3 as dec(18,2)))+'%'
      

  4.   

    第二个问题,-- 这样处理
    declare @x floatselect @x=0.89623select cast(round(@x*100,2) as varchar)+'%'-- 结果
    89.62%
      

  5.   

    select sum(t.a+t.b) as A,sum(t.c+t.d) as B from t  
    group by ..... having   sum(t.c+t.d)=9
      

  6.   


    这个忘记*100了
    ltrim(cast(col3*100.0 as dec(18,2)))+'%'
      

  7.   

    第三个问题[问题2的SQL语句]
    union all
    select avg(列1),avg(列2),avg(列3) from ([问题2的SQL语句])
      

  8.   

    第三个应该是
    group by ... with rollup