用sql语句写排名
2015-09-09 21:49
453 查看
用sql语句写排名
使用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=(SELECT COUNT(DISTINCT Score) FROM jh03 WHERE Score >= a.Score) FROM jh03 a ORDER BY Place 结果 Name Score Place ---------------- aa 99.00 1 ee 78.00 2 gg 78.00 2 dd 77.00 3 ff 76.00 4 bb 56.00 5 cc 56.00 5 ff 50.00 6 2. 名次生成方式2 , Score重复时保留名次空缺 SELECT * , Place=(SELECT COUNT(Score) FROM jh03 WHERE Score > a.Score) + 1 FROM jh03 a ORDER BY Place 结果 Name Score Place ---------------- aa 99.00 1 ee 78.00 2 gg 78.00 2 dd 77.00 4 ff 76.00 5 bb 56.00 6 cc 56.00 6 ff 50.00 8 --成绩统计示例(交叉表) --测试表 create table #t(xh varchar(3),xm varchar(10),km varchar(10),cj int) insert into #t select '001','张三','语文',80 union all select '001','张三','数学',85 union all select '002','李四','语文',90 union all select '002','李四','数学',80 union all select '003','王五','语文',70 union all select '003','王五','数学',78 --数据处理 declare @sql nvarchar(4000) , @sql1 nvarchar(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(select distinct 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 ') drop table #t /*--测试结果 学号 姓名 数学 语文 总成绩 总名次 数学名次 语文名次 ---- ------ ------- -------- ----------- ----------- ----------- ----------- 002 李四 80 90 170 1 2 1 003 王五 78 70 148 3 3 3 001 张三 85 80 165 2 1 2 --*/
相关文章推荐
- SQL中的三值逻辑
- SQL Server 作业批量停止
- 结束SQL阻塞的进程
- 动态生成SQL Server视图作业
- SQL Server 语句操纵数据库
- SQL(结构化查询语句)
- oracle sql日期比较
- linux快速部署mysql服务器
- Google排名优化的几个影响因素
- sql 存储过程分页
- 在WINXP系统上安装SQL Server企业版的方法
- 通过批处理调用SQL的方法(osql)
- SQL Server 存储过程的分页
- ASP程序与SQL存储过程结合使用详解
- SQL SERVER编写存储过程小工具
- 防御SQL注入攻击时需要注意的一个问题
- PostgreSQL教程(十九):SQL语言函数
- SQL Server复制需要有实际的服务器名称才能连接到服务器