为每n行添加计数器列到表中

我期待添加一个像CusID这样的列,它本质上是一个可以根据variables@nrowsselect的计数器。 在这种情况下, @nrows是3,只是简单地沿着添加的表格date,并为行中的每个项目添加计数器。

 CustID --- DateAdded --- 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 

如果有人可以告诉我如何在MSSQL中做到这一点,将不胜感激。

这可以用Excel中的两个公式计算,第一个计算行数并与@nrows比较

在屏幕截图中的位置A3

 =IF(B3=B2,(A2+1),1) 

第二位在屏幕截图中的ID,位置B4

 =IF(A3=$B$1,B3+1,B3) 

B1中的值是variables“@nrows”

B3中的值是起始者ID,所以你可以从任何你想要的值开始。

在这里输入图像说明

什么= MAX(1,ROUNDUP(ROW()/ @ NROWS,0))我相信产生你想要的结果。

可能不起作用的一个原因是“@NROWS”variables,OP表示他想使用。 我承认在我的testing中我使用= MAX(1,ROUNDUP(ROW()/ 3,0))

不知道如何在Excel中做到这一点,但你可以先将数据加载到SQL服务器,然后下面的语法将帮助你

 select NTILE(@NRows) over (order by DateAdded desc), DateAdded from tablename 

ROW_NUMBER()函数应用于行集。 它将产生从1开始的连续数字。通过向它们添加@nrows - 1并通过@nrows分割结果来修改这些数字:

 SELECT CustID = (ROW_NUMBER() OVER (ORDER BY DateAdded) + @nrows - 1) / @nrows, DateAdded FROM atable ; 

在SQL Fiddle上查看演示。