1

我有下表,它有 2 列。我需要编写一个返回 3 列的查询,前 2 列应与表中存在的 2 列匹配,第 3 列应分组为 n 个拆分。例如,在这种情况下,我想分成 4 个组。所以第 1 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' 
4

2 回答 2

2

在 SQL Server 中尝试 NTILE() 函数

select ID, Name, ntile(4) over (order by Name) from @Names
于 2012-10-16T11:25:07.433 回答
0

尝试这个:

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

或者

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


SQL小提琴演示

于 2012-10-16T11:28:02.463 回答