OracleSQL: получение значения полей смежных областей, если значение пустое - PullRequest
2 голосов
/ 13 мая 2019

Я получил большую таблицу A и мне нужно получить значение заполненного смежного поля (с кодом: K_P_1) внутри группы (Column: Key), если текущее поле (текст) равно нулю. Группа не обязательно должна иметь поле с кодом K_P_1. У меня много запросов в моем запросе, и я надеюсь, что следующий минимальный пример приблизит мою проблему.

Мои мысли: я действительно думал, что смогу решить свою проблему с помощью правых внешних объединений, но я понятия не имею, какой ключ комбинировать. Когда я перехожу к кейсам, я пропускаю ссылку на соседнее поле.

Мой стол A:

select Key, Code, Text from A;

Key Code  Text  
11K K_P_1 text  
11K K_P_2 (null)
11K K_P_3 (null)    
12K K_P_1 text2
12K K_P_2 (null)
12K K_P_3 (null)

Мой предполагаемый вид:

Key Code  Text   FamilyText
11K K_P_1 text   text
11K K_P_2 (null) text
11K K_P_3 (null) text   
12K K_P_1 text2  text2
12K K_P_2 (null) text2
12K K_P_3 (null) text2

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Вы можете использовать оконную функцию FIRST_VALUE :

SELECT tab.*, 
       FIRST_VALUE(Text IGNORE NULLS) OVER(PARTITION BY Key ORDER BY Code) AS FamilyText
FROM tab;
1 голос
/ 13 мая 2019
with s (Key, Code, Text) as (
select '11K', 'K_P_1', 'text'  from dual union all
select '11K', 'K_P_2', null    from dual union all
select '11K', 'K_P_3', null    from dual union all
select '12K', 'K_P_1', 'text2' from dual union all
select '12K', 'K_P_2', null    from dual union all
select '12K', 'K_P_3', null    from dual)
select s.*, lag(text ignore nulls, 1, text) over (partition by key order by code) FamilyText
from s;

KEY CODE  TEXT  FAMIL
--- ----- ----- -----
11K K_P_1 text  text 
11K K_P_2       text 
11K K_P_3       text 
12K K_P_1 text2 text2
12K K_P_2       text2
12K K_P_3       text2

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