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博客 ” ,链接:https://blog.itpub.net/21251711/viewspace-1280607/ ,如需转载,请注明出处,否则将追究法律责任。