SQL Server中分组B列<5%的记录并保留>5%的单行显示
解决方案:合并低占比记录并保留高占比记录
直接用CASE表达式配合分组聚合就能实现,不需要拆分语句再用UNION合并,一次扫描表就能得到结果:
SELECT -- 把B<5%的记录统一标记为Others,其余保留原A值 CASE WHEN B >= 0.05 THEN A ELSE 'Others' END AS A, -- 计算每组的占比总和 SUM(B) AS B FROM YourTable -- 按分组标记聚合 GROUP BY CASE WHEN B >= 0.05 THEN A ELSE 'Others' END -- 按占比降序排列,让高占比和Others的顺序更合理 ORDER BY B DESC;
注意事项:
- 如果你的
B列是带%符号的字符串类型(比如'3.5%'),需要先转成数值再判断:SELECT CASE WHEN CAST(REPLACE(B, '%', '') AS DECIMAL(5,2))/100 >= 0.05 THEN A ELSE 'Others' END AS A, SUM(CAST(REPLACE(B, '%', '') AS DECIMAL(5,2))/100) AS B FROM YourTable GROUP BY CASE WHEN CAST(REPLACE(B, '%', '') AS DECIMAL(5,2))/100 >= 0.05 THEN A ELSE 'Others' END ORDER BY B DESC; - 这个方法比
UNION更高效,因为只需要扫描一次数据表,逻辑也更简洁。
内容的提问来源于stack exchange,提问作者James Chappell
相关产品推荐
相关产品推荐

