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分别对应的那一列的数据,不知道该如何写语句,请知道的不吝赐教。
(第一次发帖,请各位多多关照)若不用游标是否可以解决?
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分别对应的那一列的数据,不知道该如何写语句,请知道的不吝赐教。
(第一次发帖,请各位多多关照)若不用游标是否可以解决?
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 分类, 等级
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