--看看这个可以吗?
create proc proc_score
as
select 姓名,学好,数学+物理+化学 as 总分,名次=(select count(*)+1 from 成绩表 where (数学+物理+化学)>a.总分)
from 成绩表 a

解决方案 »

  1.   

    --上边的有点错误!这个可以,经过测试.
    create table 成绩表(姓名 varchar(10),学号 int,数学 int,物理 int,化学 int)--建立测试表
    --插入数据
    insert 成绩表
    select 'aa',001,87,89,56
    union select 'bb',002,88,78,45
    union select 'cc',003,88,88,56
    union select 'dd',004,23,45,98
    --建立存储过程
    create proc proc_score
    as
    select 姓名,学号,数学+物理+化学 as 总分,名次=(select count(*)+1 from 成绩表 where (数学+物理+化学)>(a.数学+a.物理+a.化学))
    from 成绩表 a
    order by 名次
    go
    --执行存储过程
    exec proc_score
    --结果
    /*
    姓名         学号          总分          名次          
    ---------- ----------- ----------- ----------- 
    aa         1           232         1
    cc         3           232         1
    bb         2           211         3
    dd         4           166         4(所影响的行数为 4 行)
    */