如何使用UNION操作实现SUM汇总?SQL语句修改需求
问题
我尝试用UNION操作执行SUM汇总时出现错误。当前使用WITH子句创建临时表x(语句为with x as(select * from ..)),x的输出数据如下:
YEAR_WISE OFFICE_NAME CATEGORY KWT_COUNT NON_KWT_COUNT 2,019 HeadQuarters-MultiSpeciality Doctor 18 40 2,019 HeadQuarters-MultiSpeciality Nurse 7 16
当前执行的SQL语句:
SELECT x.YEAR_WISE,x.OFFICE_NAME,x.CATEGORY,x.KWT_COUNT,x.NON_KWT_COUNT FROM x UNION ALL SELECT ''AS YEAR_WISE,'' AS OFFICE_NAME,'SUM',sum(x.KWT_COUNT),sum(x.NON_KWT_COUNT)FROM x;
期望输出是在数据行下方添加总计行:
YEAR_WISE OFFICE_NAME CATEGORY KWT_COUNT NON_KWT_COUNT 2,019 HeadQuarters-MultiSpeciality Doctor 18 40 2,019 HeadQuarters-MultiSpeciality Nurse 7 16 SUM 25 56
要求不使用子查询,如何实现该输出?需要对语句做哪些修改?
解决方案
按以下两点修改即可实现需求:
修改点说明
- 替换空字符串为NULL:将总计行的
YEAR_WISE和OFFICE_NAME字段值从空字符串''改为NULL,多数SQL客户端会将NULL显示为空白,匹配期望输出的格式;同时避免空字符串与原字段类型不兼容的报错。 - 添加排序逻辑:通过
ORDER BY结合CASE表达式,确保总计行排在所有原始数据之后,避免顺序混乱。
修改后的SQL语句
WITH x AS (select * from ..) SELECT YEAR_WISE, OFFICE_NAME, CATEGORY, KWT_COUNT, NON_KWT_COUNT FROM x UNION ALL SELECT NULL AS YEAR_WISE, NULL AS OFFICE_NAME, 'SUM', SUM(KWT_COUNT), SUM(NON_KWT_COUNT) FROM x ORDER BY CASE WHEN CATEGORY = 'SUM' THEN 1 ELSE 0 END;
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

