有这样一张节目投票表 tblvote(id是自动增长列)id 节目 得票数
1 花好月圆 4
2 一生有你 4
3 柠檬树 2
4 加洲旅馆 3
5 我爱英语 3现在要通过一条sql语句实现这样的效果:得到排名数、节目名称、得票数,得票数相同的节目,它们的排名是一样的,
即: 排名 节目 得票数
1 花好月圆 4
1 一生有你 4
2 加洲旅馆 3
2 我爱英语 3
3 柠檬树 2请各位大哥大姐给小弟指点指点.
1 花好月圆 4
2 一生有你 4
3 柠檬树 2
4 加洲旅馆 3
5 我爱英语 3现在要通过一条sql语句实现这样的效果:得到排名数、节目名称、得票数,得票数相同的节目,它们的排名是一样的,
即: 排名 节目 得票数
1 花好月圆 4
1 一生有你 4
2 加洲旅馆 3
2 我爱英语 3
3 柠檬树 2请各位大哥大姐给小弟指点指点.
解决方案 »
- 求一个更新表的某字段到关联表的另一字段的sql
- 如何将列中符合特定长度的记录拆分,并将拆分出来的记录加入另一列中?
- 如何解决多次添加删除记录后的自动编号不连贯性?
- 100分,SQL2005数据库角色权限问题!
- 菜鸟的问题(这样的约束应该怎么加)
- 如何让自己的机器做服务器?
- 用Scroll Cursor写了一个分页的存储过程【还没封装】,大家来评价评价
- ADO的SQL语句字符串有长度限制吗?
- Apache+php可以使用SQL Server数据库吗?
- 去除某字段中的换行等特殊字符
- 今天才发现,原来系统自带的存贮过程也是可以修改的.顺便贴上系统存贮过程 sp_helptext 的代码
- 求一个sql语句,高手帮我修改一下
insert tblvote
select 1 ,'花好月圆', 4
union select 2 ,'一生有你', 4
union select 3 ,'柠檬树', 2
union select 4 ,'加洲旅馆', 3
union select 5 ,'我爱英语', 3 select 排名=(select count(1)+1 from (select distinct 得票数 from tblvote) t where a.得票数<t.得票数),节目,得票数
from tblvote a
order by 排名
drop table tblvote
insert tblvote
select 1 ,'花好月圆', 4
union select 2 ,'一生有你', 4
union select 3 ,'柠檬树', 2
union select 4 ,'加洲旅馆', 3
union select 5 ,'我爱英语', 3 select 排名=(select count(1)+1 from (select distinct 得票数 from tblvote) t where a.得票数<t.得票数),节目,得票数
from tblvote a
order by 排名drop table tblvote
/* 结果
排名 节目 得票数
----------- ------------------------------ -----------
1 花好月圆 4
1 一生有你 4
2 加洲旅馆 3
2 我爱英语 3
3 柠檬树 2(所影响的行数为 5 行)
*/
insert @t select 1,'花好月圆',4
insert @t select 2,'一生有你',4
insert @t select 3,'柠檬树',2
insert @t select 4,'加洲旅馆',3
insert @t select 5,'我爱英语',3
select * ,[count] =(select count(distinct 得票数)+1 from @t where a.得票数 > 得票数 )
from @t a
order by 得票数 desc
/*id 节目 得票数 count
----------- -------------------- ----------- -----------
1 花好月圆 4 3
2 一生有你 4 3
4 加洲旅馆 3 2
5 我爱英语 3 2
3 柠檬树 2 1*/
declare @t table(id int,节目 varchar(20),得票数 int)
insert @t select 1,'花好月圆',4
insert @t select 2,'一生有你',4
insert @t select 3,'柠檬树',2
insert @t select 4,'加洲旅馆',3
insert @t select 5,'我爱英语',3 select rank() over (order by 得票数 desc) as 排名 , 节目,得票数 from @t/*
排名 节目 得票数
-------------------- -------------------- -----------
1 花好月圆 4
1 一生有你 4
3 加洲旅馆 3
3 我爱英语 3
5 柠檬树 2(5 行受影响)*/
--使用05的rank()函数
--返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。
--RANK 函数并不总返回连续整数
select *,rank() over (order by 得票数 desc) as 排名 from t
from tblvote a
order by 得票数 descid 节目 得票数 count
----------- ---------- ----------- -----------
1 花好月圆 4 1
2 一生有你 4 1
4 加洲旅馆 3 2
5 我爱英语 3 2
3 柠檬树 2 3(所影响的行数为 5 行)