表中的字段:
  A1 A2 A3 A4
1.20 1 100 类一
2.20 0 200 类二
3.10 1 100 类一
4.20 0 200 类二
5.……
注:A2中的1为百分比,0为定额,例A11 和A13中都是20%
要显示:类一之和,类二之和
请问sql语句如何来写呢?

解决方案 »

  1.   

    select sum(A3) as A3,sum(A1) as A1 from table group by A4
    上面这个语句得出的值肯定不对
    现在就是想知道sum(A1)这个值怎么把它变成同样的格式呢(A1中的值有的是“百分比”有的是“定额”,而区分它俩的就是A2中的1为百分比0为定额,如何将A1中的百分比转为定额后,来计算它们的和)
      

  2.   

    select a1 = sum(case a2 when 0 then a1 else a1*0.1/100 end) , sum(a3) a3 from tb group by a4
      

  3.   

    create table tb(A1 int,  A2 int,  A3 int,  A4 varchar(10))
    insert into tb values(20,   1,   100,   '类一') 
    insert into tb values(20,   0,   200,   '类二') 
    insert into tb values(10,   1,   100,   '类一') 
    insert into tb values(20,   0,   200,   '类二') 
    goselect a1 = sum(case a2 when 0 then a1 else a1*0.1/100 end) , sum(a3) a3 , a4 from tb group by a4drop table tb/*
    a1                                       a3          a4         
    ---------------------------------------- ----------- ---------- 
    40.000000                                400         类二
    .030000                                  200         类一(所影响的行数为 2 行)*/
      

  4.   

    --以下假设A2=0 则 a1+a3,为1则 a1*a3/100
    --另上面的0.1改为1.0
    create table tb(A1 int,  A2 int,  A3 int,  A4 varchar(10))
    insert into tb values(20,   1,   100,   '类一') 
    insert into tb values(20,   0,   200,   '类二') 
    insert into tb values(10,   1,   100,   '类一') 
    insert into tb values(20,   0,   200,   '类二') 
    goselect a1 = cast(sum(case a2 when 0 then a1+a3 else a1*a3*1.0/100 end) as decimal(18,2)), sum(a3) a3 , a4 from tb group by a4drop table tb/*
    a1                   a3          a4         
    -------------------- ----------- ---------- 
    440.00               400         类二
    30.00                200         类一(所影响的行数为 2 行)
    */