对数据库中的纪录进行排名
来源:互联网 发布:男士润肤乳 知乎 编辑:程序博客网 时间:2024/04/27 20:03
例如,给一个班的学生的成绩进行排名,相同分数的排名相同
方法一:
create table Test
(F1 char(10),
F2 char(10))
--测试表
insert into Test
select 'a' F1,'1' F2
union
select 'b' F1,'2' F2
union
select 'c' F1,'3' F2
union
select 'd' F1,'3' F2
union
select 'e' F1,'4' F2
union
select 'f' F1,'4' F2
union
select 'g' F1,'4' F2
union
select 'h' F1,'7' F2
union
select 'i' F1,'9' F2
--插入数据
select id=identity(int,0,1),f1,f2 into #t from test order by F2 desc
select a.f1,a.f2,a.id+1-cast(id-cc-minn as Char(10)) as [名次]
from #t a,
(select f2,cc,minn from
(select f2,count(*)as cc,min(id)-count(*) as minn from #t group by f2) t)b
where a.f2=b.f2
order by a.f2 desc
--测试
drop table #t
drop table test
方法二:
--排列位置的sql server函数-------------
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
create procedure up_get_sort
@ls_o varchar(10)
as
declare @ll_sort int,
@ldc_value dec(9,2),
@ls_id varchar(16),
@ll_same int,
@ls_sql varchar(200)
Begin
---排位计算-------
-----------------------
---有这么一个规则 数值相同的排名相同,
---而且占有位置例如第1名分数相同有3人,那么第2名就从4名开始------
--======================---------------
--开始之前要把关键字和数值保存到exam_use_sort表里
set @ll_sort =1
if lower(@ls_o) = 'desc' or lower(@ls_o)='d'
begin--降序
set @ls_sql = ' SELECT id,use_value FROM exam_use_sort order by isnull(use_value,0) desc'
end
else
begin--升序
set @ls_sql = ' SELECT id,use_value FROM exam_use_sort order by isnull(use_value,0)'
end
exec('declare cur cursor for '+@ls_sql)
OPEN cur ;
fetch next from cur into @ls_id,@ldc_value;
WHILE @@FETCH_STATUS = 0
BEGIN
update exam_use_sort set use_sort = @ll_sort where
use_value = @ldc_value;
--有多少条相同的
select @ll_same = isnull(count(*),0) from exam_use_sort
where use_value = @ldc_value;
set @ll_sort = @ll_sort + @ll_same
fetch next from cur into @ls_id,@ldc_value;
END
CLOSE cur;
DEALLOCATE cur;
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
-------函数用到得表------------------
CREATE TABLE [exam_use_sort] (
[id] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[use_value] [decimal](18, 2) NULL ,
[use_sort] [int] NULL
) ON [PRIMARY]
GO
(根据CSDN摘录)
- 对数据库中的纪录进行排名
- oracle数据库开发中的问题纪录收藏
- 对oracle数据库中的数据表进行备份
- 对数据库中的索引进行碎片整理
- Infragistics-UltraGrid-对筛选后的纪录进行操作
- Google如何对网页进行排名?
- Google 如何对广告进行排名?
- 在Excel中对分数进行排名
- mysql对指定列进行排名
- 如何对数据库中的图象数据进行读写?
- [VB.NET]怎样对数据库中的所有记录进行搜索?
- Sql server 日记 (自动对数据库中的索引进行重建)
- 对数据库中的数据进行分页处理的实现
- 卸载oracle数据库对注册表中的键值进行修改
- 对数据库进行CRUD
- 利用GSON对json数据中的时间类型字符串进行处理,并且进行数据库查询
- 对某张表按某个字段进行排名,相同的名词相同
- ReportStudio入门教程(五十五) - 对每个月份进行排名
- 权限系统概要!
- 判断一段时间内连续工作超过7天的纪录
- XP 风格的可拖动列、排序的DataGrid的例子
- 项目迭代开发手记--文件分割存储用例的实现过程(2)
- 您的计算机安全吗?
- 对数据库中的纪录进行排名
- 在ASP.NET中杀死进程
- 什么是FLASH COM
- 编程者成长的成功之路 -----献给计算机及其相关专业的大学生
- 一个功能齐全的DataGrid分页例子
- 最近项作一个手机方面的东西。
- 第一次写对C的感觉!
- Hibernate的简单应用
- JScript.Encode脚本加密与解密