sql server中有一个表,其中相同id对应许多行,如何取相同id中的前三行数据?

比如:id,name,score分别为:1,A,90;1,B,85;1,C,85;2,D,78;2,E,88;2,F,87;2,G,75;如何取出各id下的前两行数据,得... 比如:
id, name,score分别为:
1,A,90;
1,B,85;
1,C,85;
2,D,78;
2,E,88;
2,F,87;
2,G,75;
如何取出各id下的前两行数据,得到结果如下:
1,A,90;
1,B,85;
2,D,78;
2,E,88;
展开
 我来答
L稂滚滚先生
2017-02-06 · 超过17用户采纳过TA的回答
知道答主
回答量:21
采纳率:0%
帮助的人:16.6万
展开全部

您好, 可以使用排名开窗函数over(),代码如下,

这里还要用到一个CTE

WITH CTE_OVER AS
(
  select ROW_NUMBER() over(partition by id order by name) as rownum,
         id, name, score from 表
)
select id, name, score from CTE_OVER where rownum <= 2;
skyfukk
2017-02-06 · TA获得超过1187个赞
知道小有建树答主
回答量:966
采纳率:100%
帮助的人:631万
展开全部
--先写一个函数,输入name,得到1和0(是否前三行)
create function GetTop3(@id int,@name varchar(100))
return bit
as
begin
declare 
    @return bit,
    @getName1 varchar(100),
    @getName2 varchar(100),
    @getName3 varchar(100)
select top 1 @getName1=name from 表名 where id=@id 
select top 2 @getName2=name from 表名 where id=@id 
select top 3 @getName3=name from 表名 where id=@id 
return (case when @name=@getName1 or @name=@getName2 or @name=@getName3 then 1 else 0 end)
end

--函数建好了之后就可以在查询里用了:
select * from 表名 where GetTop3(id,name)>0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式