基于两个COLUMNS的SQL Distinct以及这两个列值的交换应该被视为一行
如下例所示,表col1,col2和相应的输出: -
表
@POST @Path("/params")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_XML)
public String postParams(ParamRequest myRequest) {
myRequest...
...
}
输出
Col 1 Col 2
A B
A B
B A
C D
D C
E F
答案 0 :(得分:1)
尝试使用greatest
和least
以及distinct
SELECT
DISTINCT LEAST(col1,col2),
GREATEST(col1,col2)
FROM your_table;
答案 1 :(得分:0)
假设:
E F
这样的行没有"镜像"在表中,行应按原样表示在输出中。换句话说,如果最后一行是F E
而不是E F
,则不应该翻转;只有行F E
,而不是它的镜像,应该在输出中。这个要求使问题更加有趣 - 否则它会更容易,并且已经提供了解决方案。col1
和col2
不可为空。如果列中可能包含空值,则在实际存在空值时,您需要提供更详细的要求。查询和输出:
with
input_table ( col1, col2 ) as (
select 'A', 'B' from dual union all
select 'A', 'B' from dual union all
select 'B', 'A' from dual union all
select 'C', 'D' from dual union all
select 'D', 'C' from dual union all
select 'E', 'F' from dual union all
select 'Z', 'H' from dual
),
prep ( col1, col2, flag ) as (
select a.col1, a.col2, case when b.col1 is null then 0 else 1 end
from input_table a left outer join input_table b
on a.col1 = b.col2 and a.col2 = b.col1
)
select distinct
case when flag = 0 then col1 else least (col1, col2) end as col1,
case when flag = 0 then col2 else greatest(col1, col2) end as col2
from prep
;
COL1 COL2
---- ----
E F
A B
Z H
C D