2012-10-16 33 views
1

我有下表,其中有2列。我需要編寫一個查詢,它將返回3列,前2列應匹配表中的2列和第3列列應該分成n個分組。 例如在這種情況下,我想分成4組,因此第4行應該在列3中返回1,第2行應該返回2,第3行應該返回3,最後是最後3行(因爲總共有15行行)應該返回4.在sql server中對錶中的行進行分組

DECLARE @NAMES TABLE ([ID] INT IDENTITY, [NAME] VARCHAR(20)) 
INSERT INTO @NAMES SELECT 'NAME1' 
UNION ALL 
SELECT 'NAME2' 
UNION ALL 
SELECT 'NAME3' 
UNION ALL 
SELECT 'NAME4' 
UNION ALL 
SELECT 'NAME5' 
UNION ALL 
SELECT 'NAME6' 
UNION ALL 
SELECT 'NAME7' 
UNION ALL 
SELECT 'NAME8' 
UNION ALL 
SELECT 'NAME9' 
UNION ALL 
SELECT 'NAME10' 
UNION ALL 
SELECT 'NAME11' 
UNION ALL 
SELECT 'NAME12' 
UNION ALL 
SELECT 'NAME13' 
UNION ALL 
SELECT 'NAME14' 
UNION ALL 
SELECT 'NAME15' 

回答

2

嘗試NTILE()函數在SQL Server

select ID, Name, ntile(4) over (order by Name) from @Names 
+2

+1 - 但請注意,您要重新排序此數據。 'Name1'和'Name10'現在將彼此相鄰。 – MatBailie

+0

是的,謝謝你,如果你不想這樣做,你可以通過ID命令 –

0

試試這個:

select *,((ID-1)/4)+1 
from @NAMES 

select *,(ROW_NUMBER() over (order by id)-1)/4+1 
from @NAMES 


SQL fiddle demo

+0

假設身份列沒有因重新加入身份,失敗的插入,刪除等原因造成的空白。這是一個非常糟糕的假設在任何現場數據庫中。 – MatBailie

相關問題