俺的数据表如下:
================================
name xb m1 m2 m3 heji paiming
---------------------------
aaaa 男 56 45 32
bbbb 女 95 45 32
cccc 女 32 45 13
=================================俺的问题是,设计一个存储教程,根据传入的参数计算出heji字段,因俺没接触过这东西,就用函数的形式再描述一下:
就是
调用时 fun(m1,m2),那么存储过程算出来的就是把m1和m2字段相加并写入heji字段,
调用时 fun(m1,m3),那么存储过程算出来的就是把m1和m3字段相加并写入heji字段,
调用时 fun(m1,m2,m3),那么存储过程算出来的就是把m1和m2和m3字段相加并写入heji字段,或者,我要只计算女的总和,那么调用fun(女,m1,m2,m3)则计算出bbbb 和 cccc的 heji字段不知我描述清楚没有,求相应的存储过程.
另:如果我要根据合计来得到相应的排名,又该如果做呢?比如上面,我已经计算出三个人的合计,然后根据它们的合计值,得到他们的排名,不知sql2000中有没有像excel中的Rank()函数呢?所以,再求一个计算排名的存储过程,最好也可以带参数的,如fpaiming(女),则计算出所有的性别为女的排名,而且有重名的话,则下一名跳过,如1,1,3,4,5,5,7这种,并列第一后直接第三名.
================================
name xb m1 m2 m3 heji paiming
---------------------------
aaaa 男 56 45 32
bbbb 女 95 45 32
cccc 女 32 45 13
=================================俺的问题是,设计一个存储教程,根据传入的参数计算出heji字段,因俺没接触过这东西,就用函数的形式再描述一下:
就是
调用时 fun(m1,m2),那么存储过程算出来的就是把m1和m2字段相加并写入heji字段,
调用时 fun(m1,m3),那么存储过程算出来的就是把m1和m3字段相加并写入heji字段,
调用时 fun(m1,m2,m3),那么存储过程算出来的就是把m1和m2和m3字段相加并写入heji字段,或者,我要只计算女的总和,那么调用fun(女,m1,m2,m3)则计算出bbbb 和 cccc的 heji字段不知我描述清楚没有,求相应的存储过程.
另:如果我要根据合计来得到相应的排名,又该如果做呢?比如上面,我已经计算出三个人的合计,然后根据它们的合计值,得到他们的排名,不知sql2000中有没有像excel中的Rank()函数呢?所以,再求一个计算排名的存储过程,最好也可以带参数的,如fpaiming(女),则计算出所有的性别为女的排名,而且有重名的话,则下一名跳过,如1,1,3,4,5,5,7这种,并列第一后直接第三名.
@para1 int,
@para2 int,
@para3 int
return @para4 int
as
return @para1+@para2+@para3
name xb m1 m2 m3 heji paiming
---------------------------
aaaa 男 56 45 32
bbbb 女 95 45 32
cccc 女 32 45 13
=================================
Create Proc TOtal --需要统计的字段,传值为1.否则为0,调用如(0,0,1,1) 统计不按性别,而按M2,M3形式累加求和
@Sex varchar(1),
@m1 int,@m2 int,@m3 int
As
Begin
if @Sex = 0
begin
if @m1 =1
begin --m1 and m2
if m2 =1
begin
Select Sum(m1+m2) as '合计' from TableA Group by Name order by Sum(m1+m2) Asc
end
else --m1 and m3
begin
Select Sum(m1+m3) as '合计' from TableA Group by Name order by Sum(m1+m3) Asc
end
end
else --m2 and m3
begin
Select Sum(m3+m2) as '合计' from TableA Group by Name order by Sum(m3+m2) Asc
end
end
else if @Sex = 1
begin --同上,多加个WHERE条件。
Select Sum(m3+m2) as '合计' from TableA Where xb =@SEX Group by Name order by Sum(m3+m2) Asc
end
end---注:可以改写为Case when then end没调试过,你自己看看