A B 10
B A 10
A C 20
A D 20
D A 20
对A列数据和B列数据组合相同剔重,如前二行数据,a列值与b列值互等,则保留一行即可,去重后数据结果如下:
A B 10
A C 20
A D 20
表初始化脚本如下:
SQL> create table t as
2 SELECT 'A' A,'B' B, '10' C FROM DUAL UNION ALL
3 SELECT 'B','A', '10' FROM DUAL UNION ALL
4 SELECT 'A','C', '20' FROM DUAL UNION ALL
5 SELECT 'A','D', '20' FROM DUAL UNION ALL
6 SELECT 'D','A', '20' from dual;
表已创建。
SQL> select * from t;
A B C
- - --
A B 10
B A 10
A C 20
A D 20
D A 20
解决方法一:
SQL> SELECT least(a, b), greatest(a, b), MAX(c)
2 FROM t
3 GROUP BY least(a, b), greatest(a, b);
L G MA
- - --
A C 20
A D 20
A B 10
解决方法二:
SQL> SELECT MIN(a), MAX(b), MAX(c)
2 FROM t
3 GROUP BY CASE
4 WHEN a < b THEN
5 a || chr(10) || b
6 ELSE
7 b || chr(10) || a
8 END;
M M MA
- - --
A B 10
A C 20
A D 20
解决方法三:
SQL> SELECT a, b, c
2 FROM (SELECT a,
3 b,
4 c,
5 row_number() over(PARTITION BY c, greatest(a, b), least(a, b
) ORDER BY c) rn
6 FROM t)
7 WHERE rn = 1
8 ;
A B C
- - --
A B 10
A C 20
A D 20
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21251711/viewspace-1280607/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21251711/viewspace-1280607/