SQL:为重复条目创建计数器

时间:2012-06-22 10:10:07

标签: sql sql-server sql-server-2008-r2 duplicates

我想在导入步骤中为中间表上的重复条目创建一个整数计数器。假设我有一个名为FinalTable的表,如下所示:

FinalTable

ID       Date          SameDateCounter
1003     2012/01/01    NULL
1004     2012/02/01    NULL
1005     2012/03/01    1
1006     2012/03/01    2
1007     2012/03/01    3
1008     2012/04/01    1
1009     2012/04/01    2

(Date, SameDateCounter)有唯一约束。在中间步骤中,数据位于IntermediateTable,看起来与FinalTable完全相同,只是它没有任何约束。所以这个问题的出发点是:。

IntermediateTable

ID       Date          SameDateCounter
1003     2012/01/01    NULL
1004     2012/02/01    NULL
1005     2012/03/01    NULL
1006     2012/03/01    NULL
1007     2012/03/01    NULL
1008     2012/04/01    NULL
1009     2012/04/01    NULL

我需要为SameDateCounter生成值,从1开始,其中日期不止一次。

1 个答案:

答案 0 :(得分:3)

您可以将ROW_NUMBER()函数与PARTITION BY子句结合使用:

;WITH Data AS
(  
   SELECT
       ID, Date,
       SameDateCounter = ROW_NUMBER() OVER (PARTITION BY Date ORDER BY ID DESC)
   FROM dbo.YourTableNameHere
)
SELECT *
FROM Data

PARTITION BY Date子句将Date的每个单独值组合到其自己的“分区”中,并且ROW_NUMBER()为每个分区分配从1开始的数字。

因此,您的SameDayCounter将在每个新的一天从1开始,并会显示该特定日期的行。