SQL:为重复条目创建计数器
我想在导入步骤中为中间表上的重复项创建一个整数计数器。假设我有一个名为SQL:为重复条目创建计数器,sql,sql-server,sql-server-2008-r2,duplicates,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/
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
并且对(日期,SameDateCounter)
有唯一的约束。在中间步骤中,数据位于IntermediateTable
,它看起来与FinalTable
完全相同,只是没有任何约束。因此,这个问题的出发点是:
中间表
:
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开始,其中日期多次出现。您可以使用
行号()
函数和分区依据
子句组合使用:
;WITH Data AS
(
SELECT
ID, Date,
SameDateCounter = ROW_NUMBER() OVER (PARTITION BY Date ORDER BY ID DESC)
FROM dbo.YourTableNameHere
)
SELECT *
FROM Data
partitionbydate
子句将Date
的每个单独值分组到自己的“分区”中,ROW\u NUMBER()
为每个分区分配从1开始的数字
因此,您的
SameDayCounter
将在新的一天从1开始,并显示特定一天的行。是的,这是我的想法,但没有时间编写:)您可以尝试使用本文所述的秩和分区(),预期结果=如FinalTable中所示