表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是相同的 所以舍去王六。
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是相同的 所以舍去王六。
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这里没有判断stype 。就不知道如果判断怎么写
结果
id name gradename gradetypename age
19 关一 一年级 高中 20
15 王六 一年级 高中 16
11 李二 二年级 高中 19
16 王七 二年级 高中 17
18 王九 三年级 高中 19
8 张十 三年级 高中 19