俺的数据表如下:
================================
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这种,并列第一后直接第三名.

解决方案 »

  1.   

    create function xxx
    @para1 int,
    @para2 int,
    @para3 int
    return @para4 int
    as
    return @para1+@para2+@para3
      

  2.   


    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没调试过,你自己看看
      

  3.   

    描述不清楚,传入参数个数不固定,那就只能当作一个字符串参数传入,如果传入的字段都不固定,就只能同时传入字段名,用动态SOL实现了