2017-03-23 28 views
0

我有一個包含6條記錄的表,並且需要以下面的格式獲得結果,並將它們分組爲3行。如何在sql中排名/分組排序3行

輸入表:

id  Value 
------------- 
1  abcd 
2  defgh 
3  ijkl 
4  mnop 
5  qrst 
6  uvwx 

輸出格式需要:

Rank id  Value 
-------------------- 
1  1  abcd 
1  2  defgh 
1  3  ijkl 
2  4  mnop 
2  5  qrst 
2  6  uvwx 
+0

你嘗試過什麼? –

回答

1

你可以在這裏使用NTILE()。

SELECT NTILE(2) OVER(ORDER BY id),id FROM TABLE_NAME 

把它看作桶,NTILE(2)將2桶,半行的值將爲1,而另一半值2

+0

完全按照需要工作謝謝 – Sreedhar

2

下面是一個方法:

select dense_rank() over (order by (id - 1)/3) as grp, id, value 
from t; 

這假定,如在您的樣本數據,即id開始於1並且沒有差距地增加。

如果這是不正確的,那麼另一種方法是:

select dense_rank() over (order by seqnum/3) as grp, id, value 
from (select t.*, row_number() over (order by id) - 1 as seqnum 
     from t 
    ); 
0

如果ID沒有差距,從1開始:

select (id + 2)/3 as [Rank], Id, Value 
from YourTable; 

但如果ID有差距?例如1,2,4,5,...
然後窗口函數ROW_NUMBER()可以解決這個問題:

select (row_number() over (order by id) + 2)/3 as [Rank], Id, Value 
from YourTable;