--  改造一下你的存储过程.如下:
--  创建视图.
create view dbo.v_racer
as
Select P_racer.rname,
        SUM(Case scor When 9 Then 1 Else 0 End) As 满意数,
        Rtrim(Cast(SUM(Case scor When 9 Then 1 Else 0 End)*100.0/Count(*) As Decimal(10,2)))+'%' As 满意率,
        SUM(Case scor When 7 Then 1 Else 0 End) As 基本满意数,
        Rtrim(Cast(SUM(Case scor When 7 Then 1 Else 0 End)*100.0/Count(*) As Decimal(10,2)))+'%' As 基本满意率,
        SUM(Case scor When 5 Then 1 Else 0 End) As 不满意数,
        Rtrim(Cast(SUM(Case scor When 5 Then 1 Else 0 End)*100.0/Count(*) As Decimal(10,2)))+'%' As 不满意率,
        SUM(P_score.scor) As 总分,
        count(P_score.scor) as 总数
    from P_racer Inner Join P_score
    On P_racer.rid=P_score.rid
    Group By P_racer.rname
Go
--  创建存储过程.这样就可以满足你的需求了.CREATE PROCEDURE rep3
as
Select *,
     (Select Count(*)+1 
                from  v_racer C 
      Where C.总得分>P_racer.总分
        and C.满意率>P_racer.满意率
        and C.基本满意率>p_racer.基本满意率
        and C.不满意率>p_racer.不满意率) As 排名
from v_racer P_racer
order By P_racer.总分 Desc,P_racer.满意率 desc,P_racer.基本满意率 DESC,P_racer.不满意率 desc
GO

解决方案 »

  1.   

    mschen(Co-ok)如果按你的思路,排出来全为1名,我现在目的想要 222局和333局 排名变成6 7
      

  2.   

    目前查询的结果是正确的:
    排名要求为
    1.先按总分desc,如总分相同,按满意率desc,如果前两者都相同,则按,基本满意desc,如果全部想同(不如果前全三项都相同的话,说明所有的都相同了),则排名才完全相同,格式如:1,1,3
      

  3.   

    --  排名有点问题.试试这个吧!CREATE PROCEDURE rep3
    as
    Select *,
         (Select Count(*)+1 
                    from  v_racer C 
          Where C.总得分>P_racer.总分
            or( C.总得分=P_racer.总分 and C.满意率>P_racer.满意率)
            or( C.总得分=P_racer.总分 and C.满意率=P_racer.满意率 and C.基本满意率>p_racer.基本满意率) 
            or( C.总得分=P_racer.总分 and C.满意率=P_racer.满意率 and C.基本满意率=p_racer.基本满意率 and C.不满意率>p_racer.不满意率)) As 排名
    from v_racer P_racer
    order By P_racer.总分 Desc,P_racer.满意率 desc,P_racer.基本满意率 DESC,P_racer.不满意率 desc
    Go
      

  4.   

    不好意思,公司使用Oracle,所以不能测试。回去看看。