问题一:
表:田赛成绩
性别,项目,场次,姓名,出赛次序,成绩(m)
男,跳远,101,李一,1,4.86
男,跳远,101,李二,2,5.86
男,跳远,101,李三,3,3.86
男,跳远,102,李四,1,3.11
男,跳远,102,李五,2,4.11
男,跳远,102,李六,3,5.11想要的结果:
性别,项目,场次,姓名,出赛次序,成绩(m),名次
男,跳远,101,李二,2,5.86,1
男,跳远,101,李一,1,4.86,2
男,跳远,101,李三,3,3.86,3
男,跳远,102,李六,3,5.11,1
男,跳远,102,李五,2,4.11,2
男,跳远,102,李四,1,3.11,3我写了以下SQL,做到自动显示排名,但做不到分别按场次计排名,请高手指教,谢谢。SELECT a1.姓名, a1.成绩, COUNT(a2.成绩) AS 名次
FROM 田赛成绩 a1, 田赛成绩 a2
WHERE a1.成绩 <= a2.成绩 or (a1.成绩=a2.成绩 and a1.姓名 = a2.姓名)
GROUP BY a1.姓名, a1.成绩
ORDER BY a1.成绩 DESC, a1.姓名 DESC;
问题二:径赛是斗时间较短,语法又如何写?
表:田赛成绩
性别,项目,场次,姓名,出赛次序,成绩(m)
男,跳远,101,李一,1,4.86
男,跳远,101,李二,2,5.86
男,跳远,101,李三,3,3.86
男,跳远,102,李四,1,3.11
男,跳远,102,李五,2,4.11
男,跳远,102,李六,3,5.11想要的结果:
性别,项目,场次,姓名,出赛次序,成绩(m),名次
男,跳远,101,李二,2,5.86,1
男,跳远,101,李一,1,4.86,2
男,跳远,101,李三,3,3.86,3
男,跳远,102,李六,3,5.11,1
男,跳远,102,李五,2,4.11,2
男,跳远,102,李四,1,3.11,3我写了以下SQL,做到自动显示排名,但做不到分别按场次计排名,请高手指教,谢谢。SELECT a1.姓名, a1.成绩, COUNT(a2.成绩) AS 名次
FROM 田赛成绩 a1, 田赛成绩 a2
WHERE a1.成绩 <= a2.成绩 or (a1.成绩=a2.成绩 and a1.姓名 = a2.姓名)
GROUP BY a1.姓名, a1.成绩
ORDER BY a1.成绩 DESC, a1.姓名 DESC;
问题二:径赛是斗时间较短,语法又如何写?
解决方案 »
- 在线急等!!!将 expression 转换为数据类型 nvarchar 时出现算术溢出错误。 是数据长度的问题么?
- 求助,我有一个表有1千成条数据,想保留最近一个月的数据,请问该怎么做,谢谢
- 如何解决此错误:7405 16 异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询
- SQL语句优化!
- 关于create database语句的问题????????????
- 如何在查询分析器中修改某个表的名字?
- 请问,sql server需要加密吗?是如何加密的,加密后对查询修改数据库的速度有多少影响?谢谢
- 在一个procedure1中调用procedure2, 能否判断出procedure2找到结果没?
- 请问设计数据库规范的问题!!
- 我更改系统表时需要set哪项值
- Oracle,mysql,mssql区别小结,希望大家帮忙指正错漏,谢谢!
- Mysql数据库中文字符乱码问题
declare @田赛成绩 table
(性别 varchar(2),项目 varchar(4),场次 int,姓名 varchar(4),
出赛次序 int,[成绩(m)] numeric(3,2))
insert into @田赛成绩
select '男','跳远',101,'李一',1,4.86 union all
select '男','跳远',101,'李二',2,5.86 union all
select '男','跳远',101,'李三',3,3.86 union all
select '男','跳远',102,'李四',1,3.11 union all
select '男','跳远',102,'李五',2,4.11 union all
select '男','跳远',102,'李六',3,5.11select *,row_number() over (partition by 场次 order by [成绩(m)] desc)
as 名次 from @田赛成绩
/*
性别 项目 场次 姓名 出赛次序 成绩(m) 名次
---- ---- ----------- ---- ----------- ------------------- --------------------
男 跳远 101 李二 2 5.86 1
男 跳远 101 李一 1 4.86 2
男 跳远 101 李三 3 3.86 3
男 跳远 102 李六 3 5.11 1
男 跳远 102 李五 2 4.11 2
男 跳远 102 李四 1 3.11 3
*/
declare @田赛成绩 table
(性别 varchar(2),项目 varchar(4),场次 int,姓名 varchar(4),
出赛次序 int,[成绩(m)] numeric(3,2))
insert into @田赛成绩
select '男','跳远',101,'李一',1,4.86 union all
select '男','跳远',101,'李二',2,5.86 union all
select '男','跳远',101,'李三',3,3.86 union all
select '男','跳远',102,'李四',1,3.11 union all
select '男','跳远',102,'李五',2,4.11 union all
select '男','跳远',102,'李六',3,5.11--SQL SERVER 2000 没有row_number
select *,
名次=(select count(1) from @田赛成绩 where [成绩(m)]>=t.[成绩(m)] and 场次=t.场次)
from @田赛成绩 t order by 场次,7
/*
性别 项目 场次 姓名 出赛次序 成绩(m) 名次
---- ---- ----------- ---- ----------- ------------------- -----------
男 跳远 101 李二 2 5.86 1
男 跳远 101 李一 1 4.86 2
男 跳远 101 李三 3 3.86 3
男 跳远 102 李六 3 5.11 1
男 跳远 102 李五 2 4.11 2
男 跳远 102 李四 1 3.11 3
*/
问题一:
表:田赛成绩
性别,项目,场次,姓名,出赛次序,成绩(m)
男,跳远,101,李一,1,4.86
男,跳远,101,李二,2,5.86
男,跳远,101,李三,3,3.86
男,跳远,102,李四,1,3.11
男,跳远,102,李五,2,4.11
男,跳远,102,李六,3,5.11想要的结果:
性别,项目,场次,姓名,出赛次序,成绩(m),名次
男,跳远,101,李二,2,5.86,1
男,跳远,101,李一,1,4.86,2
男,跳远,101,李三,3,3.86,3
男,跳远,102,李六,3,5.11,1
男,跳远,102,李五,2,4.11,2
男,跳远,102,李四,1,3.11,3
*/go
if OBJECT_ID('田赛成绩')is not null
drop table 田赛成绩
go
create table 田赛成绩(
性别 varchar(2),
项目 varchar(4),
场次 varchar(5),
姓名 varchar(10),
出赛次序 int,
[成绩(m)] numeric(3,2)
)
go
insert 田赛成绩
select '男','跳远',101,'李一',1,4.86 union all
select '男','跳远',101,'李二',2,5.86 union all
select '男','跳远',101,'李三',3,3.86 union all
select '男','跳远',102,'李四',1,3.11 union all
select '男','跳远',102,'李五',2,4.11 union all
select '男','跳远',102,'李六',3,5.11select *,ROW_NUMBER()over(partition by 场次 order by [成绩(m)] desc) as 名次
from 田赛成绩/*
你要的结果:
性别 项目 场次 姓名 出赛次序 成绩(m) 名次
男 跳远 101 李二 2 5.86 1
男 跳远 101 李一 1 4.86 2
男 跳远 101 李三 3 3.86 3
男 跳远 102 李六 3 5.11 1
男 跳远 102 李五 2 4.11 2
男 跳远 102 李四 1 3.11 3
*/
#3 修正一下还有可能,但是我不确定你试试吧
--#3修改后
select * from
(select *,
(select count(1) from @田赛成绩 where [成绩(m)]>=t.[成绩(m)] and 场次=t.场次) as 名次
from @田赛成绩 t
) aa order by 场次,名次
--#3修改后(把@田赛成绩 改成你的表名)
select * from
(select *,
(select count(1) from 田赛成绩 where [成绩(m)]>=t.[成绩(m)] and 场次=t.场次) as 名次
from 田赛成绩 t
) aa order by 场次,名次
高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手! 高手!
成功! 成功!成功! 成功! 成功!成功!成功! 成功!成功!成功! 成功!成功!成功! 成功!成功!成功! 成功!
Thank you very much! Thank you very much! Thank you very much! Thank you very much! Thank you very much! Thank you very much! Thank you very much!Thank you very much!