0

我希望添加一个这样的列CusID,本质上是一个可以根据 variable 选择的计数器@nrows。在这种情况下@nrows是 3,只是简单地向下添加表日期,并为行中的每个项目添加计数器。

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 中做到这一点,将不胜感激。

4

4 回答 4

1

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

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

于 2013-03-20T12:15:36.960 回答
1

这可以在 Excel 中使用两个公式来完成,第一个公式计算行数并与 @nrows 进行比较

屏幕截图中的位置 A3

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

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

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

B1 中的值是变量“@nrows”

B3 中的值是起始 ID,因此您可以从任何您想要的值开始。

在此处输入图像描述

于 2013-03-20T11:57:48.177 回答
0

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

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

请参阅SQL Fiddle 上的演示。

于 2013-03-22T12:14:52.723 回答
0

不知道如何在excel中做,但你可以先将数据加载到SQL server中,然后下面的语法会帮助你


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

于 2013-03-20T03:20:28.770 回答