获得n个重复值

时间:2015-08-23 04:56:42

标签: 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
        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个可以重复任意次数的值。我可以解释得更好。如果我在Name列上应用Distinct(),我会第一次得到Aaron,Arthur,Ben,然后是第二次cal,luke和mandy。但由于姓氏不同,我无法应用明显的名称。所以我只需要获得所有具有那些不同值的行所需的独特值。所有行都是第一次使用Aaron,Arthur和ben,第二次使用cal,luke和mandy所有行

2 个答案:

答案 0 :(得分:0)

试试这个

  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

答案 1 :(得分:0)

试试这个,

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