gpt4 book ai didi

sql - Oracle如何将多行合并为单行

转载 作者:行者123 更新时间:2023-12-04 22:18:11 25 4
gpt4 key购买 nike

我正在寻找将多行“合并”为一行的想法

假设我有这样的表:

ID |  A  |  B  |  C  |  D  |
____________________________
1 | x | y |null | z |
2 |null | z |null | x |
3 | p | w | a |null |
4 | o |null | k |null |

现在我需要将所有 ID 较低的行的更改应用到每一行。
第一行是一个基础,所以它看起来应该是:
1 |  x  |  y  |null |  z  |

现在,对于第二行,我需要取第一行并从第二行应用更改(如果列不为空)。第二行应该是这样的:
2 |  x  |  z  |null |  x  |

第三行 - 取第一行,从第二行和第三行应用更改:
3 |  p  |  w  |  a  |  x  |

第四行 - 取第一行,应用第二、第三和第四的更改:
4 |  o  |  w  |  k  |  x  | 

所以输出应该是这样的:
1 |  x  |  y  |null |  z  |
2 | x | z |null | x |
3 | p | w | a | x |
4 | o | w | k | x |

是否有任何可用于此目的的 Oracle 功能?

最佳答案

使用分层查询:

CREATE TABLE abcd(
id int,
A varchar2(10),
B varchar2(10),
C varchar2(10), D varchar2(10)
);

insert all
into abcd values(1,'x','y',null,'z')
into abcd values(2,null,'z',null,'x')
into abcd values(3,'p','w','a',null)
into abcd values(4,'o',null,'k',null)
select 1 from dual;

commit;
WITH qq(id, a,b,c,d) AS(
SELECT id, a,b,c,d FROM abcd WHERE id = 1
UNION ALL
SELECT x.id,
coalesce( x.a, qq.a ),
coalesce( x.b, qq.b ),
coalesce( x.c, qq.c ),
coalesce( x.d, qq.d )
FROM qq
JOIN abcd x ON x.id = qq.id + 1
)
SELECT * FROM qq;

ID A B C D
---------- ---------- ---------- ---------- ----------
1 x y z
2 x z x
3 p w a x
4 o w k x

关于sql - Oracle如何将多行合并为单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com