Как получить Различное значение для столбца на основе другого столбца в Oracle - PullRequest
0 голосов
/ 17 мая 2019

Я хочу получить различные значения из COL1 и его значения COL3, но условие состоит в том, что если COL1 = COl2, то следует выбрать соответствующее значение COL3, в противном случае выбрать значение COL1, если они не совпадают.Я застрял в логике, любая помощь будет оценена по достоинству!

Пожалуйста, смотрите ниже изображение для более подробной информации:

select  DISTINCT COL1, 
CASE WHEN COL1 = COL2 THEN COL3 END COL3 from TABLE1 
WHERE COL1 IS NOT NULL;

enter image description here

Ответы [ 5 ]

1 голос
/ 17 мая 2019

Выполните GROUP BY, чтобы получить различные значения COL1.

Используйте COALESCE() для возврата значения COL3, если существует строка COL1 = COL2, в противном случае верните максимальное значение COL3 для COL1.(Можно использовать и MIN(), если так лучше.)

select COL1,
       COALESCE( MAX(CASE WHEN COL1 = COL2 THEN COL3 END), MAX(COL3) )
FROM table1
WHERE COL1 IS NOT NULL
GROUP BY COL1
1 голос
/ 17 мая 2019

использовать коррелированный подзапрос

select col1,col3 
from TABLE1 a 
      where col2 in (select min(col2) from table1 b where a.col1=b.col1)
0 голосов
/ 17 мая 2019

При самостоятельном присоединении:

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

См. Демоверсию .Результаты:

> COL1 | COL3
> ---: | :---
>   11 | ABC 
>   12 | ABC 
>   13 | BDG 
>   14 | DEF 
>   15 | CEG 
0 голосов
/ 17 мая 2019
select distinct COL1, if(COL1 = COL2, COL3, COL1) as result
from table1
0 голосов
/ 17 мая 2019

Я думаю, что вы можете присоединиться к таблице с самим собой, а затем использовать условие объединения, чтобы отфильтровать это, затем решить, выберите ли 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

Таким образому вас есть в таблице a все данные и в таблице b данные, если и только если COL1 совпадает с COL2.Затем вы выбираете, какой COL3 не равен NULL, предпочтительно тот, который указан в таблице b.Есть функция объединения Oracle, которая делает именно это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...