SQL实现分组列多值合并为单一值并按规则筛选数据的方法
问题解答
你写的SET y.name = 'Students'写法不可行,CASE是值表达式,仅用于返回计算结果,不支持修改原字段值的SET操作。
实现方案
直接在匹配到Candidates的分支返回固定字符串'Students'即可。另外如果要过滤掉不符合要求的其他类型(比如Preschool、Home School这类不需要返回的),建议在WHERE子句中补充过滤条件,避免CASE返回NULL值,同时提高SQL执行效率。
修正后的代码示例如下:
SELECT MAX(CASE WHEN x.type = 'education' THEN CASE WHEN y.name LIKE '%Elementry%' THEN y.name WHEN y.name LIKE '%Collage%' THEN y.name WHEN y.name LIKE '%University%' THEN y.name WHEN y.name LIKE '%Students%' THEN y.name WHEN y.name LIKE '%Candidates%' THEN 'Students' END END) AS education_type FROM 你的x表名 x JOIN 关联的y表名 ON 你的表关联条件 WHERE x.type = 'education' -- 过滤不需要返回的其他类型数据 AND ( y.name LIKE '%Elementry%' OR y.name LIKE '%Collage%' OR y.name LIKE '%University%' OR y.name LIKE '%Students%' OR y.name LIKE '%Candidates%' ) -- 如有分组需求可在此处补充GROUP BY 你的分组字段
修改后所有匹配到Candidates的行都会被统一标记为Students,和原有的Students类数据会被归为同一类参与后续统计。
内容的提问来源于stack exchange,提问作者bluePearl
相关产品推荐
相关产品推荐

