在sql server中对表的行进行分组

时间:2012-10-16 11:23:48

标签: sql sql-server sql-server-2008

我有下面的表有2列。我需要编写一个返回3列的查询,前2列应该与表中的2列匹配,第3列应该分成n个分组。 例如,在这种情况下,我想分成4组。所以前4行应该在第3列中返回1,第4行应该返回2,第3行应该返回3,最后是3行(总共有15行) )应该返回4.

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 个答案:

答案 0 :(得分:2)

在SQL Server中尝试NTILE()函数

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

答案 1 :(得分:0)

试试这个:

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

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


SQL fiddle demo