2

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

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 组。

帮助将不胜感激。

4

2 回答 2

1

您是否正在寻找类似的东西:

declare @n as int = 3

SELECT
((ROW_NUMBER() over (order by period desc) - 1) / @n) + 1 as counter,
[period]
FROM [a].[dbo].[a]
于 2013-03-20T20:08:19.120 回答
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
于 2013-03-20T19:41:07.580 回答