表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,stype from [grade]
结果
1 一年级 1 1 小学 1 1
3 三年级 3 2 初中 9 2
4 二年级 5 2 初中 8 3
5 一年级 1 3 高中 10 3
6 二年级 2 3 高中 4 2  
7 一年级 1 2 初中 7 3
9 二年级 2 2 初中 8 1  
10 三年级 3 3 高中 12 2
11 六年级 6 1 小学 6 3
12 二年级 2 3 高中 11 1
13 五年级 5 1 小学 5 2
15 一年级 1 2 初中 7 3
16 一年级 1 3 高中 15 1
18 二年级 2 3 高中 16 2
19 三年级 3 3 高中 19 3
20 一年级 1 3 高中 21 1
我想得到的结果是 高中 一年级 ,二年级,三年级 brownum最大的前两名同学,若同年级stype相同则过滤查下一条数据
id name gradename gradetypename age stype
19 关一 一年级 高中 20 1
13 李四 一年级 高中 10 3
11 李二 二年级 高中 19 1
16 王七 二年级 高中 17 2
18 王九 三年级 高中 19 3
8 张十 三年级 高中 19 2  这里的 高中一年级李四 brownum没有高中一年级的王六 brownum大 但 王六与关一的stype是相同的 所以舍去王六。

解决方案 »

  1.   

    stype相同的按照什么原则舍去呢?你也没说。
      

  2.   

    举例
    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
    结果
    id name gradename gradetypename age stype
    19 关一 一年级 高中 20 1
    15 王六 一年级 高中 16 1
    11 李二 二年级 高中 19 1
    16 王七 二年级 高中 17 2
    18 王九 三年级 高中 19 3
    8  张十 三年级 高中 19 1上面的结果高中一年级 关一和王六 stype都是 1,我想要的结果是如果stype是一样的则不要第二条直到有stype与第一条style值不相等,也就是说只在同年级中取不同style的brownum最大值
    ,想要的结果是
    19 关一 一年级 高中 20 1
    13 李四 一年级 高中 10 3
    11 李二 二年级 高中 19 1
    16 王七 二年级 高中 17 2
    18 王九 三年级 高中 19 3
    8 张十 三年级 高中 19 2   
    这里 李四虽然没有王六brownum高但是他的stype值是3 与关一不同。
    --大神懂了吗