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

在sql server中对表的行进行分组,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,下表有2列。我需要编写一个查询,返回3列,前2列应与表中的2列匹配,第3列应分组为n个拆分。 例如,在本例中,我想分为4组。因此,前4行应在第3列中返回1,第2 4行应返回2,第3 4行应返回3,最后3行(总共15行)应返回4 DECLARE @NAMES TABLE ( [ID] INT IDENTITY, [NAME] VARCHAR(20) ) INSERT INTO @NAMES SELECT 'NAME1' UNION ALL SELECT 'NAME2' UNION AL

下表有2列。我需要编写一个查询,返回3列,前2列应与表中的2列匹配,第3列应分组为n个拆分。 例如,在本例中,我想分为4组。因此,前4行应在第3列中返回1,第2 4行应返回2,第3 4行应返回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' 
请尝试在SQL Server中使用NTILE()函数

select ID, Name, ntile(4) over (order by Name) from @Names
试试这个:

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



假设标识列没有因重新设置标识种子、插入失败、删除失败等而导致的间隙。这在任何实时数据库中都是一个非常糟糕的假设。+1-但请注意,您正在重新排序此数据
Name1
Name10
现在将彼此相邻。是的,谢谢您,如果您不想这样做,您可以按id订购
select *,(ROW_NUMBER() over (order by id)-1)/4+1
from @NAMES