学员分数表
姓名          科目     分数
zhang san    语文      60
lisi         语文      71
wangwu       语文      61
zhaoliu      语文      90
.....  
所得结果 姓名
zhang san    语文      第四名
lisi         语文      第二名
wangwu       语文      第三名
zhaoliu      语文      第一名
      想破头也想不出来,敬请高人指点,谢谢!

解决方案 »

  1.   

    http://www.idotnet.org/down/mssql.doc
    有类似的例子说明。
    分别有成绩重复和成绩不重复的查询算法。
      

  2.   


    DECLARE @T TABLE(NAME VARCHAR(50),SUBJECT VARCHAR(20),GRADE INT)
    INSERT @T SELECT 'zhang san','语文',60
    UNION ALL SELECT 'lisi','语文',71
    UNION ALL SELECT 'wangwu','语文',61
    UNION ALL SELECT 'zhaoliu','语文',90SELECT
         NAME,
         SUBJECT,
         PM=(SELECT COUNT(1) FROM @T WHERE  GRADE>=A.GRADE)
    FROM @T A
      

  3.   

    --这样更满足要求
    DECLARE @T TABLE(NAME VARCHAR(50),SUBJECT VARCHAR(20),GRADE INT)
    INSERT @T SELECT 'zhang san','语文',60
    UNION ALL SELECT 'lisi','语文',71
    UNION ALL SELECT 'wangwu','语文',61
    UNION ALL SELECT 'zhaoliu','语文',90SELECT
         NAME,
         SUBJECT,
         PM='第'+RTRIM((SELECT COUNT(1) FROM @T WHERE  GRADE>=A.GRADE))+'名'
    FROM @T A
      

  4.   

    SELECT * INTO #TB_SCORE
    FROM
    (
    SELECT 'zhang san'姓名,'语文'课程,'60'成绩
    UNION ALL
    SELECT 'lisi'姓名,'语文'课程,'71'成绩
    UNION ALL
    SELECT 'wangwu'姓名,'语文'课程,'61'成绩
    UNION ALL
    SELECT 'zhaoliu'姓名,'语文'课程,'90'成绩
    UNION ALL
    SELECT 'youran'姓名,'语文'课程,'60'成绩
    )ASELECT * FROM #TB_SCORESELECT 姓名,课程,#TB_SCORE.成绩,'第'+CONVERT(VARCHAR(2),名次)+'名'AS 名次
    FROM #TB_SCORE
    INNER JOIN
    (
     SELECT 成绩,名次=(SELECT COUNT(1) FROM(SELECT DISTINCT 成绩 FROM #TB_SCORE)B WHERE B.成绩>=A.成绩)
     FROM
     (SELECT DISTINCT 成绩 FROM #TB_SCORE)A
    )T ON T.成绩 = #TB_SCORE.成绩
    ORDER BY 名次
      

  5.   

    select 姓名=a.name,科目=a.kemo,
    名次=case  when (select count(fenshu)from Type where fenshu>a.fenshu)+1=1 then '第一名'
    when (select count(fenshu)from Type where fenshu>a.fenshu)+1=2 then '第二名'
    when (select count(fenshu)from Type where fenshu>a.fenshu)+1=3 then '第三名'
    when (select count(fenshu)from Type where fenshu>a.fenshu)+1=4 then '第四名'
    end  from Type as a