我正在努力解决以下问题:
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组。
将非常感谢帮助。
答案 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]