如何通过SELECT语句合并表中信息相同但列位不同的两行?
问题:合并列位置互换的重复行
假设存在如下结构与数据的表:
FK | Field1 | Field2 ===================== 3 | ABC | DEF 3 | DEF | ABC
现需将这两行信息相同但列位置不同的数据合并为一行,能否通过SELECT查询语句得到如下结果?
FK | Field1 | Field2 ===================== 3 | ABC | DEF
可以实现,以下是两种常用方案:
方案1:利用聚合函数统一字段顺序
通过LEAST()(取最小值)和GREATEST()(取最大值)函数固定Field1和Field2的顺序,再按FK分组去重,适配大多数SQL数据库:
SELECT FK, LEAST(Field1, Field2) AS Field1, GREATEST(Field1, Field2) AS Field2 FROM your_table GROUP BY FK;
注:Oracle等部分数据库可直接用MIN(Field1, Field2)和MAX(Field1, Field2)替代上述函数。
方案2:自连接过滤重复行
通过自连接匹配列互换的行,只保留Field1小于等于Field2的记录,同时用DISTINCT确保唯一性:
SELECT DISTINCT t1.FK, t1.Field1, t1.Field2 FROM your_table t1 LEFT JOIN your_table t2 ON t1.FK = t2.FK AND t1.Field1 = t2.Field2 AND t1.Field2 = t2.Field1 WHERE t1.Field1 <= t1.Field2;
内容的提问来源于stack exchange,提问作者Tiffany Zhu
相关产品推荐
相关产品推荐

