您好, 可以使用排名开窗函数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;
--先写一个函数,输入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