使用SQL语句求排名 表jh03有下列数据: name score aa 99 bb 56 cc 56 dd 77 ee 78 ff 76 gg 78 ff 50 1. 名次生成方式1 , Score重复时合并名次 SELECT* , Place=(SELECTCOUNT(DISTINCT Score) FROM jh03 WHERE Score >= a.Score) FROM jh03 a ORDERBY Place 结果 Name Score Place ---------------- aa 99.001 ee 78.002 gg 78.002 dd 77.003 ff 76.004 bb 56.005 cc 56.005 ff 50.006 2. 名次生成方式2 , Score重复时保留名次空缺 SELECT* , Place=(SELECTCOUNT(Score) FROM jh03 WHERE Score > a.Score) +1 FROM jh03 a ORDERBY Place 结果 Name Score Place ---------------- aa 99.001 ee 78.002 gg 78.002 dd 77.004 ff 76.005 bb 56.006 cc 56.006 ff 50.008 --成绩统计示例(交叉表) --测试表 createtable #t(xh varchar(3),xm varchar(10),km varchar(10),cj int) insertinto #t select'001','张三','语文',80 unionallselect'001','张三','数学',85 unionallselect'002','李四','语文',90 unionallselect'002','李四','数学',80 unionallselect'003','王五','语文',70 unionallselect'003','王五','数学',78 --数据处理 declare@sqlnvarchar(4000) , @sql1nvarchar(4000) select@sql='' , @sql1='' select@sql=@sql+',['+ km +'] = sum(case km when '''+ km +''' then cj else 0 end)' ,@sql1=@sql1+',['+ km +'名次]=(select sum(1) from # where ['+ km +'] >= a.['+ km +'])' from(selectdistinct km from #t) a exec('select xh 学号,xm 姓名'+@sql+',总成绩=sum(cj) ,总名次=(select sum(1) from(select xh,aa=sum(cj) from #t group by xh) aa where sum(a.cj)<=aa) into # from #t a group by xh,xm select *'+@sql1+' from # a ') droptable #t /**//*--测试结果 学号 姓名 数学 语文 总成绩 总名次 数学名次 语文名次 ---- ------ ------- -------- ----------- ----------- ----------- ----------- 002 李四 80 90 170 1 2 1 003 王五 78 70 148 3 3 3 001 张三 85 80 165 2 1 2 --*/