我有成千上万的群体在一个表中,是这样的:选择前100组
1..
1..
2..
2..
2..
2..
3..
3..
.
.
.
10000..
10000..
我怎样才能使一个选择给我的前3组各一次。
我想要的东西像从行中选择Top 3,但它必须返回前三组而不是前三行。
我有成千上万的群体在一个表中,是这样的:选择前100组
1..
1..
2..
2..
2..
2..
3..
3..
.
.
.
10000..
10000..
我怎样才能使一个选择给我的前3组各一次。
我想要的东西像从行中选择Top 3,但它必须返回前三组而不是前三行。
你可以试试这个:
;with cte as (
select distinct groupId from mytable order by groupid
)
select * from mytable where TheGroupId in (select top 3 groupdid from cte)
您可以使用DENSE_RANK
为每个组分配一个数字。同一组的所有成员将具有相同的编号。然后在外部查询,选择顶部3组:
SELECT *
FROM (SELECT *, DENSE_RANK() OVER (ORDER BY id) AS rnk
FROM mytable) t
WHERE t.rnk <= 3
上述查询假定id
是用于组的列记录在一起。
有一个SQL TOP声明,做是做什么的这个
SELECT TOP number|percent column_name(s) FROM table_name;
的描述,它是如何在替代使用例如用于mysql和ms访问的sql语句可以在这里找到:http://www.w3schools.com/sql/sql_top.asp
我的错误我误解了你的问题,这将返回顶部的行而不是组,你能解释你正在试图做更详细的?
嘿,你知道吗,你在评论中提问而不是在答案中。您应该编辑或删除您的答案。 – Stephan
SELECT *
FROM
(SELECT *
,ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY [Group] ASC)rn
FROM TableName
)A
WHERE rn <= 3
使用排序功能Row_Number()
:
SELECT *
FROM (SELECT *,
Row_number()
OVER(
partition BY GroupId
ORDER BY GroupId) AS [rn]
FROM YourTable) t
WHERE rn <= 3
检查这个MSDN doc为所有排名功能的细节。
你有相同的记录或不同的记录? –
我不确定你的意思,你可以扩展一下你想做的事情吗? – HoneyBadger
你只想要组ID还是一些汇总数据?按哪个顺序? – 1010