专栏;将表中的行除以nrows

时间:2013-03-20 19:33:31

标签: sql-server tsql

我正在努力解决以下问题:

Counter --- Period ---
 1         2012-02-09 
 1         2012-02-09 
 1         2012-02-08 
 2         2012-02-07 
 2         2012-02-07
 2         2012-02-07 
 3         2012-02-06
 3         2012-02-06

我不知道使用什么函数或如何添加一个计数器列,它将表中的句点行除以3并添加计数。它会分开直到它可以并将剩余的行分配为下一个计数器(如上所示)。在上面的示例中,@ n是3,因此它计算每个句点分配1,直到3完成并计数。

我看过NTILE,因为它只是将它分成n组。

将非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

你可能需要澄清你的问题;如果我使用NTILE(),我会得到您正在寻找的结果(如果您包含ID):

declare @tableA table(id int identity, col1 date)

insert into @tableA values ('2012-02-09')
insert into @tableA values ('2012-02-09')
insert into @tableA values ('2012-02-08')
insert into @tableA values ('2012-02-07')
insert into @tableA values ('2012-02-07')
insert into @tableA values ('2012-02-07')
insert into @tableA values ('2012-02-06')
insert into @tableA values ('2012-02-06')

select ntile(3) over (order by id) counter, col1 Period from @tableA

结果:

counter              Period
-------------------- ----------
1                    2012-02-09
1                    2012-02-09
1                    2012-02-08
2                    2012-02-07
2                    2012-02-07
2                    2012-02-07
3                    2012-02-06
3                    2012-02-06

答案 1 :(得分:1)

您正在寻找类似的东西:

declare @n as int = 3

SELECT
((ROW_NUMBER() over (order by period desc) - 1) / @n) + 1 as counter,
[period]
FROM [a].[dbo].[a]