You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何用表1的ID匹配表2语句并新增统计列?

在SQL Server中实现批量统计与姓名汇总

针对你的需求,完全可以在SQL Server中实现,以下是具体步骤和代码:

一、批量统计表2中提及表1每行ID的行数

你可以通过子查询或关联查询的方式,将统计逻辑批量应用到表1的所有行:

方式1:查询结果直接展示

如果只是需要查询结果,不需要修改原表结构,可以用LEFT JOIN分组统计:

SELECT 
    t1.ID,
    COUNT(t2.Sentence) AS 提及次数
FROM [Table 1] t1
LEFT JOIN [Table 2] t2 ON t2.Sentence LIKE '%' + t1.ID + '%'
GROUP BY t1.ID

方式2:给表1新增列并更新数据

如果要将统计结果永久保存到表1中:

  1. 先添加“提及次数”列:
ALTER TABLE [Table 1] ADD 提及次数 INT DEFAULT 0;
  1. 用子查询批量更新每行的统计值:
UPDATE t1
SET 提及次数 = (
    SELECT COUNT(Sentence)
    FROM [Table 2] t2
    WHERE t2.Sentence LIKE '%' + t1.ID + '%'
)
FROM [Table 1] t1;

二、汇总提及该行ID的人员姓名

假设表2中存储人员姓名的列为PersonName(请根据实际列名替换),SQL Server 2017及以上版本支持STRING_AGG函数来拼接多个姓名,步骤如下:

  1. 先添加“提及人员”列:
ALTER TABLE [Table 1] ADD 提及人员 VARCHAR(MAX);
  1. 批量更新汇总的人员姓名(如果需要去重,加上DISTINCT):
UPDATE t1
SET 提及人员 = (
    SELECT STRING_AGG(DISTINCT t2.PersonName, '、') 
    FROM [Table 2] t2
    WHERE t2.Sentence LIKE '%' + t1.ID + '%'
)
FROM [Table 1] t1;

注意事项

  • 用LIKE '%' + t1.ID + '%'可能会匹配到包含该ID子串的内容(比如ID是"123",语句里的"1234"也会被匹配),如果ID有固定格式(比如前后有空格或特殊符号),可以调整匹配条件减少误判,例如:LIKE '% ' + t1.ID + ' %'
  • 如果你的SQL Server版本低于2017,无法使用STRING_AGG,可以用FOR XML PATH的方式拼接字符串,示例:
UPDATE t1
SET 提及人员 = STUFF(
    (SELECT DISTINCT '、' + t2.PersonName
     FROM [Table 2] t2
     WHERE t2.Sentence LIKE '%' + t1.ID + '%'
     FOR XML PATH('')), 1, 1, ''
)
FROM [Table 1] t1;

内容的提问来源于stack exchange,提问作者petchde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:17:39