计算SQL Server中行中重复值的数量

时间:2018-09-03 04:36:40

标签: sql-server tsql

如果此值先前存在于行中,我想设置数字。我想要下面的输出。

Date                        Empno           Count
-------------------------------------------------------
2018-08-01 06:00:00.000     10103612    1
2018-08-02 14:30:54.000     10103610    1
2018-08-03 06:30:00.000     10103660    1
2018-08-04 06:00:00.000     10103660    2
2018-08-04 19:15:00.000     10103610    2
2018-08-05 12:00:00.000     10103603    1
2018-08-05 17:30:00.000     10103603    2
2018-08-06 06:30:00.000     10103660    3
2018-08-06 07:00:00.000     10103531    1

即,如果Empno在列表中第二或第三次出现,我想在下一列中显示其计数。您可以在10103660中看到它在列表中出现3次,因此列表中每次的计数都会增加。

2 个答案:

答案 0 :(得分:2)

ROW_NUMBER()OVER()结合使用,您可以计算出Empno列中具有相同值的行数。

以下内容将返回EmpnoCount,它将告诉您与Empno的记录相比,EmpnoCount列中有多少记录具有相同的值:

SELECT [Date],
       [Empno],
       ROW_NUMBER() OVER (PARTITION BY [Empno] ORDER BY [Date]) AS EmpnoCount
FROM INSERT_TABLE_NAME
ORDER BY [EmpnoCount] DESC

结果应按重复次数最多的Empno值的降序排列。

更新#1

Working example link到SQL Fiddle,其中显示了上述查询的结果。

答案 1 :(得分:1)

您只需使用ROW_NUMBER()窗口功能即可完成OVER()

SELECT [Date], 
       [Empno], 
       ROW_NUMBER() OVER (PARTITION BY [Empno] ORDER BY [Date]) as [Count]
FROM   yourtable
ORDER BY [Date];