1 房产 北京 8 
2 房产 北京 7 
3 房产 北京 6 
4 房产 广东东莞 8 
5 房产 广东东莞 7 
6 房产 广东东莞 6 
7 字画 北京 2 
8 字画 北京 1 
9 字画 北京 0 
10 字画 福建福州 9 
11 字画 福建福州 8 
12 字画 福建福州 7 
13 动漫 福建厦门 2 
14 动漫 福建厦门 1 
15 动漫 福建厦门 0 
16 动漫 广东东莞 7 
17 动漫 广东东莞 5 
18 动漫 广东东莞 3 
有这样一组数据,列名分别是id,分类,地点,等级,其中id列不存在,仅为描述方便之用。 
我现在想要查询的是每组每地排名前2的数据,即最终结果是id号为1,2,4,5,7,8,10,11,13,14,16,17分别对应的那一列的数据,不知道该如何写语句,请知道的不吝赐教。
(第一次发帖,请各位多多关照)若不用游标是否可以解决?

解决方案 »

  1.   

    select * from [Table] a where id in(select top 2 id from [Table] where 分类=a.分类 and 地点=a.地点 order by 等级 desc)
      

  2.   

    --方法一:
    Select * From 表 A
    Where (Select Count(分类) From 表 Where 分类 = A.分类 And 地点 = A.地点 And 等级 > A.等级) < 2
    Order By 分类, 等级--方法二:
    Select * From 表 A
    Where Exists (Select Count(分类) From 表 Where 分类 = A.分类 And 地点 = A.地点 And 等级 > A.等级 Having Count(分类) < 2)
    Order By 分类, 等级--方法三:
    Select * From 表 A
    Where 等级 In (Select TOP 2 等级 From 表 Where 分类 = A.分类 And 地点 = A.地点 Order By 等级 Desc)
    Order By 分类, 等级
      

  3.   

    paoluo(一天到晚游泳的鱼) ( ) 高人出手果然快狠准~
      

  4.   

    select * from t a 
    where id in(select top 2 id from t where 分类=a.分类 and 地点=a.地点 
                order by 等级 desc)--结果:
    id          分类         地点         等级          
    ----------- ---------- ---------- ----------- 
    1           房产         北京         8
    2           房产         北京         7
    4           房产         广东东莞       8
    5           房产         广东东莞       7
    7           字画         北京         2
    8           字画         北京         1
    10          字画         福建福州       9
    11          字画         福建福州       8
    13          动漫         福建厦门       2
    14          动漫         福建厦门       1
    16          动漫         广东东莞       7
    17          动漫         广东东莞       5