SQL列内差异统计求助:箱号格式不同致统计结果错误
解决箱号格式不同的总箱数统计问题
首先咱们得把统计逻辑理清楚:总箱数 = 独立箱(无后缀)的数量 + 带后缀子箱对应的母箱去重数量。你之前用固定长度截取的方式可能会踩坑(比如万一有些后缀长度不一致),咱们换更灵活的思路来处理:
分步统计方案
- 统计独立箱数量:筛选出不含
-的箱号,去重后计数 - 统计母箱数量:筛选出含
-的箱号,提取-之前的母箱编号,去重后计数 - 合并结果:把两个统计结果相加得到总箱数
具体SQL脚本
方式一:子查询直接合并结果
SELECT -- 统计无后缀的独立箱数量 (SELECT COUNT(DISTINCT FD_E77BE253) FROM 你的表名 WHERE FD_E77BE253 NOT LIKE '%-%' AND FD_E77BE253 IS NOT NULL) + -- 统计带后缀的母箱去重数量(用分隔符定位截取更可靠) (SELECT COUNT(DISTINCT LEFT(FD_E77BE253, CHARINDEX('-', FD_E77BE253) - 1)) FROM 你的表名 WHERE FD_E77BE253 LIKE '%-%' AND FD_E77BE253 IS NOT NULL) AS 总箱数;
方式二:用CTE标准化箱号后统计
如果想更清晰地看到每个箱号的归属,可以先把所有箱号统一成“母箱/独立箱”的标准格式,再去重计数:
WITH 标准化箱号 AS ( SELECT CASE WHEN FD_E77BE253 LIKE '%-%' THEN LEFT(FD_E77BE253, CHARINDEX('-', FD_E77BE253) - 1) ELSE FD_E77BE253 END AS 标准箱号 FROM 你的表名 WHERE FD_E77BE253 IS NOT NULL ) SELECT COUNT(DISTINCT 标准箱号) AS 总箱数 FROM 标准化箱号;
为什么之前的脚本可能出错?
你之前用len(FD_E77BE253) -5截取,默认了后缀是-0001这种固定5位(包括-),但如果存在其他长度的后缀(比如-01、-001),截取结果就会出错。用CHARINDEX('-', ...)定位分隔符位置,能自适应不同的后缀长度,稳定性更高。另外别忘了过滤空值,避免干扰统计结果。
内容的提问来源于stack exchange,提问作者user3906930
相关产品推荐
相关产品推荐

