如果此值先前存在于行中,我想设置数字。我想要下面的输出。
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次,因此列表中每次的计数都会增加。
答案 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];