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的所有行