Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:为重复条目创建计数器_Sql_Sql Server_Sql Server 2008 R2_Duplicates - Fatal编程技术网

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中所示