我在表格中有数千个组,例如:
1..
1..
2..
2..
2..
2..
3..
3..
.
.
.
10000..
10000..
我怎样才能做出每次都给我前三组的选择。
我希望从行中选择前三名,但必须返回前三组而不是前三行。
答案 0 :(得分:3)
你可以试试这个:
;with cte as (
select distinct groupId from mytable order by groupid
)
select * from mytable where TheGroupId in (select top 3 groupdid from cte)
答案 1 :(得分:1)
您可以使用DENSE_RANK
为每个组分配一个号码。同一组的所有成员将具有相同的编号。然后在外部查询中,选择前3个组:
SELECT *
FROM (SELECT *, DENSE_RANK() OVER (ORDER BY id) AS rnk
FROM mytable ) t
WHERE t.rnk <= 3
上述查询假设id
是用于将记录组合在一起的列。
答案 2 :(得分:1)
使用排名功能Row_Number()
:
SELECT *
FROM (SELECT *,
Row_number()
OVER(
partition BY GroupId
ORDER BY GroupId) AS [rn]
FROM YourTable) t
WHERE rn <= 3
检查此MSDN doc以获取所有排名功能的详细信息。
答案 3 :(得分:0)
有一个sql TOP语句执行此操作
SELECT TOP number|percent column_name(s) FROM table_name;
可以在此处找到有关它的用途以及如何在替代sql语句中使用它的说明,例如mysql和ms访问:http://www.w3schools.com/sql/sql_top.asp
我的错误我误解了你的问题,这将返回顶行不是群组,你能解释一下你想要做的更详细吗?
答案 4 :(得分:0)
SELECT *
FROM
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY [Group] ASC)rn
FROM TableName
)A
WHERE rn <= 3