我想在导入步骤中为中间表上的重复条目创建一个整数计数器。假设我有一个名为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开始,其中日期不止一次。
答案 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开始,并会显示该特定日期的行。