如何使用SQL解决case语句查询时结果行重复的问题
问题根因
- 原SQL将CASE表达式的结果纳入了GROUP BY的分组维度,同一个姓名的不同Value记录会被拆分为独立分组,因此出现多行重复数据。
- 该场景属于典型的行转列需求,需要将CASE逻辑放入聚合函数内,仅保留姓名作为唯一分组维度即可实现单行合并。
可用查询代码
SELECT Name, MAX(CASE WHEN LTRIM(Value) = 'Car' THEN 'true' ELSE 'false' END) AS car, MAX(CASE WHEN LTRIM(Value) = 'Train' THEN 'true' ELSE 'false' END) AS train, MAX(CASE WHEN LTRIM(Value) = 'Bus' THEN 'true' ELSE 'false' END) AS bus, MAX(CASE WHEN LTRIM(Value) = 'Bike' THEN 'true' ELSE 'false' END) AS bike FROM sourceTbl GROUP BY Name -- 如需仅查询David 可取消注释下一行 -- WHERE Name = 'David'
逻辑说明
- 聚合函数
MAX()可以实现同一个姓名下的结果合并:只要存在任意一条符合条件的记录,就返回true,无符合条件记录则返回false,完全匹配预期输出。 - 代码中增加了
LTRIM()函数用于处理测试数据中Bus字段前的多余空格,避免匹配失败,若实际生产数据无格式问题可删除该函数。
内容的提问来源于stack exchange,提问作者David Akoko
相关产品推荐
相关产品推荐

