请教一个分组排序的问题

ghxghx 2006-01-19 02:43:02
有一张表 表A
结构如下:
考号 班级 姓名 成绩
001 01 a 70
002 01 aa 80
003 02 b 60
004 02 bb 56
.... .. .. ..
现在需要按成绩查询每班前90%的人,我想用一句sql很难实现的,如果用游标可能会比较好解决这个问题。
可是如果在vfp下就很简单了:
select top 90.00 percent * ;
from A
group by A.班级,A.成绩 ;
order by A.班级 desc,A.成绩 desc

sql server 的group 是不是不如vfp的灵活?

希望大家发表好的解决办法,一同讨论


...全文
206 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
datalover 2006-02-28
  • 打赏
  • 举报
回复
学习
mislrb 2006-01-19
  • 打赏
  • 举报
回复
學習下
wfliu 2006-01-19
  • 打赏
  • 举报
回复
学习 !
yangyangxie 2006-01-19
  • 打赏
  • 举报
回复
studying
bbdx2523 2006-01-19
  • 打赏
  • 举报
回复
顶一下,接分,
子陌红尘是强人啊,
xiaoxiao1023 2006-01-19
  • 打赏
  • 举报
回复
看贴学习中...
ghxghx 2006-01-19
  • 打赏
  • 举报
回复
谢谢两位,又学到一个基本的技巧,再挂2个小时后结贴
ghxghx 2006-01-19
  • 打赏
  • 举报
回复
测试过了结果是正确的
子陌红尘 2006-01-19
  • 打赏
  • 举报
回复
DECLARE @A TABLE(考号 VARCHAR(20),班级 VARCHAR(20),姓名 VARCHAR(20),成绩 INT)
INSERT INTO @A SELECT '001','01','a ',79
INSERT INTO @A SELECT '002','01','aa',89
INSERT INTO @A SELECT '003','01','b ',78
INSERT INTO @A SELECT '004','01','bb',88
INSERT INTO @A SELECT '005','01','c ',77
INSERT INTO @A SELECT '006','01','cc',87
INSERT INTO @A SELECT '007','01','d ',76
INSERT INTO @A SELECT '008','01','dd',86
INSERT INTO @A SELECT '009','01','e ',75
INSERT INTO @A SELECT '010','01','ee',85
INSERT INTO @A SELECT '101','02','f ',64
INSERT INTO @A SELECT '102','02','ff',54
INSERT INTO @A SELECT '103','02','g ',73
INSERT INTO @A SELECT '104','02','gg',83
INSERT INTO @A SELECT '105','02','h ',72
INSERT INTO @A SELECT '106','02','hh',82
INSERT INTO @A SELECT '107','02','i ',71
INSERT INTO @A SELECT '108','02','ii',81
INSERT INTO @A SELECT '109','02','j ',70
INSERT INTO @A SELECT '110','02','k ',80

SELECT
t.*
FROM
@A t
WHERE
t.考号 IN(select top 90 percent 考号 from @A WHERE 班级=t.班级 order by 成绩 desc)
order by 班级,成绩 desc

/*
考号 班级 姓名 成绩
----- ----- ------ -----
002 01 aa 89
004 01 bb 88
006 01 cc 87
008 01 dd 86
010 01 ee 85
001 01 a 79
003 01 b 78
005 01 c 77
007 01 d 76
104 02 gg 83
106 02 hh 82
108 02 ii 81
110 02 k 80
103 02 g 73
105 02 h 72
107 02 i 71
109 02 j 70
101 02 f 64
*/
gujianmin 2006-01-19
  • 打赏
  • 举报
回复
苍天啊,为什么我总是在后边默默的顶着
-狙击手- 2006-01-19
  • 打赏
  • 举报
回复
SELECT
t.*
FROM
A t
WHERE
t.考号 IN(select top 90 percent 考号 from A WHERE 班级=t.班级 order by 成绩 desc)
子陌红尘 2006-01-19
  • 打赏
  • 举报
回复
SELECT
t.*
FROM
A t
WHERE
t.考号 IN(select top 90 percent 考号 from A WHERE 班级=t.班级 order by 成绩 desc)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧