表user ID为自动增长 gradetypeid 表示几年级
select id,name,gradetypeid,brownum,age,meteid,[date] from users
结果
1 张三 1 11 12 1  2012-10-11
2 张四 2 16 11 9  2012-09-10
3 张五 2 17 7 8   2012-09-01
4 张六 3 16 9 10  2012-08-07
5 张七 3 18 7 4  2012-09-10
6 张八 2 19 9 7   2012-07-06
7 张九 2 21 16 8  2012-05-04
8 张十 3 41 19 12 2012-06-09
9 李一 1 71 7 6   2012-03-01
11 李二 3 99 19 11 2012-09-11 
13 李四 1 88 10 5  2012-01-08
14 王五 2 54 15 7  2012-06-05
15 王六 3 33 16 15 2012-02-03
16 王七 3 44 17 16 2012-09-10
18 王九 3 56 19 19 2012-03-09
19 关一 3 34 20 21 2012-06-07
表grade id为自动增长
select id, gradename,gradeid,gradetypeid,gradetypename,meteid from [grade]
结果
1 一年级 1 1 小学 1
3 三年级 3 2 初中 9
4 二年级 5 2 初中 8
5 一年级 1 3 高中 10
6 二年级 2 3 高中 4
7 一年级 1 2 初中 7
9 二年级 2 2 初中 8
10 三年级 3 3 高中 12
11 六年级 6 1 小学 6
12 二年级 2 3 高中 11
13 五年级 5 1 小学 5
15 一年级 1 2 初中 7
16 一年级 1 3 高中 15
18 二年级 2 3 高中 16
19 三年级 3 3 高中 19
20 一年级 1 3 高中 21
我想得到的结果是 高中 一年级 ,二年级,三年级 brownum最大的前两名数据
id name  gradename gradetypename age
19 关一   一年级   高中    20
15 王六   一年级  高中    16
11 李二   二年级  高中    19
16 王七   二年级  高中    17
18 王九   三年级  高中    19
8  张十   三年级  高中    19

解决方案 »

  1.   

    select ID,name,gradename,gradetypename,age
    from 
    (
    select a.ID,a.name,gradename,gradetypename,age,ROW_NUMBER() over(partition by gradename order by brownum desc) as rowid
    from user as a inner join grade as b on a.gradetypeid=b.gradetypeid
    where b.gradetypename='高中' and gradename in ('一年级','二年级','三年级')
    ) as TB
    where rowid<3
      

  2.   

    测试数据 不对SELECT *
    FROM #users a JOIN #grade b ON a.gradetypeid=b.gradetypeid
    WHERE [gradetypename]='高中'你看看结果
      

  3.   

    SELECT * FROM 
    (
    SELECT a.id ,name, gradetypename, gradename ,brownum, age,
    row=ROW_NUMBER()OVER(PARTITION BY [gradename]  ORDER BY brownum  DESC) 
    FROM #users a JOIN #grade b ON a.gradetypeid=b.gradetypeid--这里可能还要加 and a.[meteid]=b.[meteid]
    WHERE [gradetypename]='高中'
    ) t
    WHERE row<=2