Sql 获取n个重复值

Sql 获取n个重复值,sql,asp.net,sql-server-2008,pagination,Sql,Asp.net,Sql Server 2008,Pagination,我有一张桌子 Id FName Lname RowNo ---------------------------- 1 Aaron K 0 2 Aaron L 1 3 Arthur M 2 4 Arthur G 3 5 Arthur D 4 6 Ben S 5

我有一张桌子

        Id  FName  Lname  RowNo
       ----------------------------
        1   Aaron    K     0
        2   Aaron    L     1
        3   Arthur   M     2
        4   Arthur   G     3
        5   Arthur   D     4
        6   Ben      S     5
        7   Ben      E     6
        8   Cal      W     7
        9   Luke     A     8
        10  Mandy    N     9 
我在这个表上实现了分页,因此得到了行号。但我的问题是,不是每次都要得到3行,而是要得到所有具有3个重复值的行。例如,首先我想得到所有名为Aaron、Arthur、Ben的行,即0到6行,然后是接下来的3个重复值,例如cal、luke和mandy等等。这在SQL中可能吗

--编辑----
我想要3个可以重复任意次数的值。让我解释得更好。如果我在名称列上应用Distinct(),第一次会得到Aaron、Arthur、Ben,第二次是cal、luke和mandy。但是,由于姓氏不同,我不能使用distinct。因此,除了得到不同的值,我需要得到所有具有这些不同值的行。即,第一次是Aaron、Arthur和ben的所有行,第二次是cal、luke和mandy的所有行。

如果我正确理解了你的问题,你需要所有FName重复三次的行,按ID排序

试试这个:

从按Id asc排序的计数(FName)>3的按FName分组中选择FName、Lname、Id

试试这个

  With CTE
    as
    (
    select row_number() over(partition by FName, order by Id) as rn,
    Id,FName,LName from YourTable
    )

    select * from CTE
这将为您提供所需的结果

您只需要在where子句中添加页码。例如,如果您想要第1页,查询的最后一行将改为下面

select * from CTE where rn=1
试试这个

declare @t table(Id int, FName varchar(10),  Lname char(1), RowNo int)
insert into  @t (Id, FName,  Lname , RowNo) values(
1,'Aaron'  ,'K', 0),
(2,'Aaron','L',1),
(3,'Arthur','M',2),
(4,'Arthur','G',3),
(5,'Arthur','D',4),
(6,'Ben', 'S',5),
(7,'Ben', 'E',6),
(8,'Cal', 'W',7),
(9,'Luke','A',8),
(10,  'Mandy','N',9)


select t.*,floor((t1.rno-1) / 3) as pge  from @t t join (select  fname,row_number() 
 over (order by fname) rno   from @t group by fname ) t1 on t.fname=t1.fname 

我使用densite_rank()找到了解决方案。而不是行号()。工作完美。

不,我想要3个可以重复任意次数的值。让我解释得更清楚些。如果我在名称列上应用Distinct(),第一次会得到Aaron、Arthur、Ben,第二次是cal、luke和mandy。但是,由于姓氏不同,我不能使用distinct。因此,除了得到不同的值,我需要得到所有具有这些不同值的行,即第一次是Aaron、Arthur和ben的所有行,第二次是cal、luke和mandy的所有行