我有一个大表A,并且如果当前字段(文本)为空,则需要获取组(列:键)中一个已填充的相邻字段(代码:K_P_1)的值。组不一定具有代码为K_P_1的字段。我的查询中有很多联接,希望下面的最小示例使我的问题更紧密。
我的事:我实际上以为我可以通过正确的外部联接来解决我的问题,但是我不知道该组合什么钥匙。当我遍历case语句时,我缺少对相邻字段的引用。
我的表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
答案 0 :(得分:2)
您可以使用窗口函数FIRST_VALUE:
SELECT tab.*,
FIRST_VALUE(Text IGNORE NULLS) OVER(PARTITION BY Key ORDER BY Code) AS FamilyText
FROM tab;
答案 1 :(得分:1)
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.