SQL统计:如何计算ToolCode在WorkCenter字符串中匹配的行数?
解决WorkCenter字段包含ToolCode值的分组统计问题
需求说明
统计JT_WorkCenter表中WorkCenter字段包含JT_ToolCode表ToolCode字段值的行数,并按ToolCode分组汇总。
示例数据
- JT_ToolCode表ToolCode列数据:Drill、Screwdriver、Saw
- JT_WorkCenter表WorkCenter列数据:Screwdriver1、Drill1、Saw2、Saw3、Screwdriver15、Drill 12、Saw10
期望结果
每个ToolCode对应的匹配行数:Drill:2,Saw:3,Screwdriver:2
问题分析
你之前的SQL存在两个问题:
- 用
Left(Workcenter,Len(ToolCode))仅能匹配ToolCode在WorkCenter开头且长度完全一致的内容,无法处理像Drill 12这种ToolCode后带空格的情况,匹配逻辑不严谨 - 分组时错误加入了
WorkCenter,导致统计结果被拆分,无法得到每个ToolCode的总匹配数
正确SQL示例
使用模糊匹配LIKE判断包含关系,结合LEFT JOIN确保所有ToolCode都能被统计:
SELECT tc.ToolCode, COUNT(wc.WorkCenter) AS MatchCount FROM JT_ToolCode tc LEFT JOIN JT_WorkCenter wc ON wc.WorkCenter LIKE '%' + tc.ToolCode + '%' GROUP BY tc.ToolCode
代码说明
LEFT JOIN:保留JT_ToolCode中所有ToolCode记录,即使没有匹配的WorkCenter行也会显示0LIKE '%' + tc.ToolCode + '%':判断WorkCenter字符串中是否包含对应ToolCode,适配ToolCode在任意位置的情况- 仅按
tc.ToolCode分组:确保每个ToolCode只统计一次总匹配行数
验证结果
用示例数据运行上述SQL,会得到如下结果:
| ToolCode | MatchCount |
|---|---|
| Drill | 2 |
| Screwdriver | 2 |
| Saw | 3 |
内容的提问来源于stack exchange,提问作者pestomania
相关产品推荐
相关产品推荐

