有一数据库:
科目 姓名 分数语文 张三 80
语文 李四 75
语文 王五 85
语文 赵六 90
数学 张三 100
数学 李四 90
数学 王五 60
数学 赵六 75
英语 张三 80
英语 李四 85
英语 王五 60
英语 赵六 70怎么样用一SQL语句得到每科目分数前三名的记录?
科目 姓名 分数语文 张三 80
语文 李四 75
语文 王五 85
语文 赵六 90
数学 张三 100
数学 李四 90
数学 王五 60
数学 赵六 75
英语 张三 80
英语 李四 85
英语 王五 60
英语 赵六 70怎么样用一SQL语句得到每科目分数前三名的记录?
(select count(1) from TableN where 科目=A.科目 and 分数<=A.分数)<=3
INSERT T1 SELECT '语文','张三',80
UNION ALL SELECT '语文','李四',75
UNION ALL SELECT '语文','王五',85
UNION ALL SELECT '语文','赵六',90
UNION ALL SELECT '数学','张三',100
UNION ALL SELECT '数学','李四',90
UNION ALL SELECT '数学','王五',60
UNION ALL SELECT '数学','赵六',75
UNION ALL SELECT '英语','张三',80
UNION ALL SELECT '英语','李四',85
UNION ALL SELECT '英语','王五',60
UNION ALL SELECT '英语','赵六',70SELECT *,IDENTITY(INT,1,1) AS ID INTO # FROM T1SELECT * FROM # A
WHERE ID IN
(SELECT TOP 3 ID FROM # WHERE SUBJECT=A.SUBJECT ORDER BY SCORE DESC)
insert test
select '语文','张三',80 union all
select '语文','李四',75 union all
select '语文','王五',85 union all
select '语文','赵六',90 union all
select '数学','张三',100 union all
select '数学','李四',90 union all
select '数学','李**',90 union all -- 假设有两个同分(第二)
select '数学','王五',60 union all
select '数学','赵六',75 union all
select '英语','张三',80 union all
select '英语','李四',85 union all
select '英语','王五',60 union all
select '英语',' 赵六',70
--select * from test order by km,fs descselect * from test A where fs in(select top 3 fs from
(
select distinct fs from test where km=A.km
)B
order by fs desc) order by km,fs descdrop table test