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

问题描述 投票:2回答:2

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

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次,因此计数在列表中每次都会递增。

sql-server tsql
2个回答
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
投票

你可以简单地做一个ROW_NUMBER()OVER()窗口功能

SELECT [Date], 
       [Empno], 
       ROW_NUMBER() OVER (PARTITION BY [Empno] ORDER BY [Date]) as [Count]
FROM   yourtable
ORDER BY [Date];
© www.soinside.com 2019 - 2024. All rights reserved.