我有一张表格,例如。
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所有行
答案 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