我想从COL1中获得不同的值,它也是COL3的值,但条件是如果COL1 = COl2,则应选择匹配的COL3值,否则选择不相同的COL1值。我坚持逻辑,将不胜感激!
有关更多详细信息,请参见下图:
select DISTINCT COL1,
CASE WHEN COL1 = COL2 THEN COL3 END COL3 from TABLE1
WHERE COL1 IS NOT NULL;
答案 0 :(得分:1)
使用相关子查询
select col1,col3
from TABLE1 a
where col2 in (select min(col2) from table1 b where a.col1=b.col1)
答案 1 :(得分:1)
执行GROUP BY
以获得不同的COL1值。
如果存在COL1 = COL2行,请使用COALESCE()
返回COL3值,否则返回COL1的最大COL3值。 (如果更好,也可以使用MIN()
。)
select COL1,
COALESCE( MAX(CASE WHEN COL1 = COL2 THEN COL3 END), MAX(COL3) )
FROM table1
WHERE COL1 IS NOT NULL
GROUP BY COL1
答案 2 :(得分:0)
我认为您可以将表与自身连接,然后使用连接条件将其过滤掉,然后选择是否存在COL2 = COL1并选择适当的COL3:
SELECT DISTINCT a.COL1, CASE WHEN b.COL1 IS NULL THEN a.COL3 ELSE b.COL3 END as COL3
FROM TABLE1 a
LEFT JOIN TBALE2 b
on a.COL1 = b.COL2
and a.COL1 = b.COL1
这样,当且仅当COL1与COL2匹配时,您才在表a上拥有所有数据,在表b上拥有数据。然后,选择其中一个不为空的COL3,最好选择表b中的那个。 Oracle功能合并可以做到这一点。
答案 3 :(得分:0)
select distinct COL1, if(COL1 = COL2, COL3, COL1) as result
from table1
答案 4 :(得分:0)
使用自我加入:
select distinct
t.col1,
case
when tt.col1 is null then t.col3
else tt.col3
end col3
from tablename t left join tablename tt
on tt.col1 = t.col1 and tt.col2 = t.col1
请参见demo。
结果:
> COL1 | COL3
> ---: | :---
> 11 | ABC
> 12 | ABC
> 13 | BDG
> 14 | DEF
> 15 | CEG