如何编写T-SQL查询将B列更新为对应名称在A列的出现次数
实现方案
假设你的表名为YourTable,存储名称的列为A,待更新的计数列为B,可使用以下两种T-SQL语句实现需求:
方案1:CTE + 开窗函数(更适合大规模数据表,执行效率更高)
WITH NameCountCTE AS ( SELECT B, COUNT(*) OVER(PARTITION BY A) AS TotalOccur FROM YourTable ) UPDATE NameCountCTE SET B = TotalOccur
方案2:关联子查询写法
UPDATE t1 SET t1.B = ( SELECT COUNT(*) FROM YourTable t2 WHERE t2.A = t1.A ) FROM YourTable t1
注意事项
- 请将语句中的
YourTable替换为你实际的表名,若列名不符也同步替换即可。 - 大表执行更新前建议先给A列创建非聚集索引,可大幅提升计算速度。
- 正式更新前可先执行以下语句验证结果是否符合预期,避免误操作:
SELECT A, B AS OriginalB, COUNT(*) OVER(PARTITION BY A) AS ExpectedB FROM YourTable
内容的提问来源于stack exchange,提问作者Animesh
相关产品推荐
相关产品推荐

