表中的字段:
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语句如何来写呢?
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语句如何来写呢?
上面这个语句得出的值肯定不对
现在就是想知道sum(A1)这个值怎么把它变成同样的格式呢(A1中的值有的是“百分比”有的是“定额”,而区分它俩的就是A2中的1为百分比0为定额,如何将A1中的百分比转为定额后,来计算它们的和)
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 行)*/
--另上面的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 行)
*/