2015-08-23 110 views
-1

我有一個表格,例如。獲取n個重複值

 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。但由於姓氏不同,我無法區分。所以非常有必要得到我需要的不同值,以獲得具有不同值的所有行。所有具有Aaron,Arthur和第一行的行以及第二次所有具有cal,luke和mandy的行

回答

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 
0

如果我正確地理解了你的問題,你需要FName重複三次的所有行,按ID排序。

嘗試這種情況:

從組中選擇FName參數,L-NAME,標識由具有計數FName參數(FName參數)> 3順序按ID ASC;

+0

不,我想要3個值,可以重複任意次數。我解釋得更好。如果我在名字列上應用Distinct(),我會得到Aaron,Arthur,Ben第一次,然後第二次cal,luke和mandy。但由於姓氏不同,我無法區分。所以非常有必要得到我需要的不同值,以獲得具有不同值的所有行。即:所有行都與Aaron,Arthur第一次合作,並且所有行都是cal,luke和mandy第二次 –

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 
0

我發現使用溶液DENSE_RANK()。而不是row_Number()。完美地工作。