为 SQL 服务器中的列中的每个值计算冗余

Count redundant for each value in a column in SQL server

如果我在 SQL Server 2019 数据库中有以下 table 如下:

|id   | name   | count  |
+-----+--------+--------+
| 1   | rose   |   1    |
| 2   | peter  |   1    |
| 3   | ann    |   1    |
| 4   | rose   |   2    |
| 5   | ann    |   2    |
| 6   | ann    |   3    |
| 7   | mike   |   1    |

我想知道插入的名称是否已存在于“名称”列中以及出现了多少次,并在其旁边添加一个计数,如“计数”列中所示。比如第二次插入ann的时候我在旁边放了计数值2,第三次插入ann的时候我在旁边放了3。

如何使用 SQL 做到这一点?

谢谢

这是一种使用 insert ... select 语法的方法:

insert into mytable (name, cnt)
select v.name, (select count(*) + 1 from mytable t where t.name = v.name)
from (values (@name)) v(name)

要插入的值在导出的 table values() 中作为 @name 给出。然后我们使用子查询来统计在 table.

中已经存在了多少这样的名字
Select Name, Count(*) 
From Table
Group By Name 

我建议您在 查询 table 时计算此信息,而不是在 插入 行时:

select t.*,
       row_number() over (partition by name order by id) as count
from t;

该值将始终正确 -- 即使更新数据或删除行。