Oracle SQL:如何用Case语句将B类性别计数拆分至M、F类别
实现方案
没问题,这里给你一个用CASE语句实现需求的SQL方案,刚好能满足把双性(B)的计数分别加到男性(M)和女性(F)统计里的要求:
SELECT Name, 'M' AS Gender, SUM(CASE WHEN Gender = 'M' THEN `Count(Gender)` WHEN Gender = 'B' THEN `Count(Gender)` ELSE 0 END) AS `Count(Gender)` FROM your_table_name GROUP BY Name UNION ALL SELECT Name, 'F' AS Gender, SUM(CASE WHEN Gender = 'F' THEN `Count(Gender)` WHEN Gender = 'B' THEN `Count(Gender)` ELSE 0 END) AS `Count(Gender)` FROM your_table_name GROUP BY Name UNION ALL SELECT Name, 'N' AS Gender, SUM(`Count(Gender)`) AS `Count(Gender)` FROM your_table_name WHERE Gender = 'N' GROUP BY Name ORDER BY Gender;
代码说明:
- 统计男性(M)总数:通过
CASE语句,把原表中性别为M的计数,加上性别为B的计数,得到最终的男性统计数。 - 统计女性(F)总数:和男性逻辑一致,用
CASE把原表中F和B的计数相加。 - 统计未指定(N)总数:直接筛选出性别为
N的记录求和即可,无需额外处理。 - 最后用
UNION ALL将三个分组统计的结果合并,并按性别排序,就能得到你需要的最终结果表。
注意:记得把代码里的your_table_name替换成你实际使用的数据表名称哦。
内容的提问来源于stack exchange,提问作者DanielV
相关产品推荐
相关产品推荐

