如何基于键值在SQL中合并两行数据?
解决方案
你要实现的是对相同FK的记录,将每个字段合并为**只要有Y就保留Y,否则保留N**的结果,用SQL聚合逻辑就能搞定:
简洁实现方案(利用字符顺序)
SELECT FK, MAX(Field1) AS Field1, MAX(Field2) AS Field2, MAX(Feild3) AS Feild3 FROM 你的表名 GROUP BY FK;
原理:字符Y的ASCII码(89)比N(78)大,MAX()聚合函数会自动选取每个字段组内的最大值(也就是Y),刚好匹配需求。
通用实现方案(不依赖字符顺序)
如果字段值的逻辑不基于ASCII顺序,用CASE统计更稳妥:
SELECT FK, CASE WHEN SUM(CASE WHEN Field1 = 'Y' THEN 1 ELSE 0 END) > 0 THEN 'Y' ELSE 'N' END AS Field1, CASE WHEN SUM(CASE WHEN Field2 = 'Y' THEN 1 ELSE 0 END) > 0 THEN 'Y' ELSE 'N' END AS Field2, CASE WHEN SUM(CASE WHEN Feild3 = 'Y' THEN 1 ELSE 0 END) > 0 THEN 'Y' ELSE 'N' END AS Feild3 FROM 你的表名 GROUP BY FK;
原理:统计每个字段下Y出现的次数,只要有1次就返回Y,否则返回N,适配更多场景。
内容的提问来源于stack exchange,提问作者teja
相关产品推荐
相关产品推荐

