如何用SQL将PROPRIETAI='PRIVE'的长度合并到同一行求和?
实现PROPRIETAI='PRIVE'时合并长度求和到同一行的SQL方案
需求:当PROPRIETAI = 'PRIVE'时,将该类别下所有TYPE_STRUC对应的长度求和后展示在同一行;其他PROPRIETAI类别仍按原TYPE_STRUC分组展示。
当前使用的SQL代码:
SELECT PROPRIETAI,TYPE_STRUC, sum(ROUND((LGR_REEL))) as "Longueur (m)" FROM SUPPORT GROUP BY PROPRIETAI, TYPE_STRUC ORDER BY CASE WHEN PROPRIETAI = 'FT' THEN 1 WHEN PROPRIETAI = 'FREE MOBILE' THEN 2 WHEN PROPRIETAI = 'PRIVE' THEN 3 ELSE 4 END
当前问题:PRIVE类别会按不同TYPE_STRUC拆分成多行,不符合“同一行展示总和”的需求。
解决方案(通用SQL写法,适配多数数据库):
SELECT PROPRIETAI, -- 对PRIVE统一TYPE_STRUC值,实现合并分组 CASE WHEN PROPRIETAI = 'PRIVE' THEN 'TOTAL PRIVE' ELSE TYPE_STRUC END AS TYPE_STRUC, SUM(ROUND(LGR_REEL)) AS "Longueur (m)" FROM SUPPORT GROUP BY PROPRIETAI, -- 分组逻辑与SELECT中的CASE保持一致 CASE WHEN PROPRIETAI = 'PRIVE' THEN 'TOTAL PRIVE' ELSE TYPE_STRUC END ORDER BY CASE PROPRIETAI WHEN 'FT' THEN 1 WHEN 'FREE MOBILE' THEN 2 WHEN 'PRIVE' THEN 3 ELSE 4 END, TYPE_STRUC
逻辑说明
- 通过
CASE语句将PRIVE对应的所有TYPE_STRUC替换为同一个标识(示例中用'TOTAL PRIVE',也可改为空字符串或其他自定义文本),确保该类别下所有记录被归为同一分组。 GROUP BY子句必须与SELECT中处理TYPE_STRUC的逻辑完全匹配,否则会出现分组不一致的错误。- 排序逻辑保留原有优先级,新增
TYPE_STRUC排序让结果展示更规整。
内容的提问来源于stack exchange,提问作者Fatine MOBARIK
相关产品推荐
相关产品推荐

