有一数据库:
科目  姓名  分数语文  张三  80
语文  李四  75
语文  王五  85
语文  赵六  90
数学  张三  100
数学  李四  90
数学  王五  60
数学  赵六  75
英语  张三  80
英语  李四  85
英语  王五  60
英语  赵六  70怎么样用一SQL语句得到每科目分数前三名的记录?

解决方案 »

  1.   

    select * from TableN A where 
    (select count(1) from TableN where 科目=A.科目 and 分数<=A.分数)<=3
      

  2.   

    http://community.csdn.net/Expert/topic/4826/4826331.xml?temp=.4179346
      

  3.   

    CREATE TABLE T1(SUBJECT VARCHAR(10),NAME VARCHAR(10),SCORE INT)
    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)
      

  4.   

    create table test(km varchar(10),xm varchar(10),fs int)
    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