我在表格中有如下图所示的数据:

我想要这样的东西:

我尝试插入第一个id、nr_1和lbl_1,然后使用:
MERGE INTO ...
WHEN MATCHED THEN UPDATE SET...
WHEN NOT MATCHED THEN INSERT..但似乎不起作用。
没有人有更好的解决方案来实现这个目标而不使用MERGE吗?
发布于 2020-10-29 01:43:14
您可以使用将值放入单个列的listagg来实现类似的操作:
select distinct
id,
listagg(nr || ' ' || lbl, ' ')
within group (order by nr)
over (partition by id) as "nr_1 lbl_1 nr_2 lbl_2 nr_3 lbl_3"
from a
order by id ID nr_1 lbl_1 nr_2 lbl_2 nr_3 lbl_3
---------- --------------------------------
1001 x a y b z c
1002 x a z c
1003 z c发布于 2020-10-29 04:48:58
有很多方法可以使用Oracle的case,decode,liastagg,pivot,sys_connect_by_path,xmlagg funtions.Here来实现输出。
SELECT id,
MAX(DECODE ( rnk , 1, nr )) nr1,MAX(DECODE ( rnk , 1, lbl )) lbl1,
MAX(DECODE ( rnk , 2, nr )) nr2,MAX(DECODE ( rnk , 2, lbl )) lbl2,
MAX(DECODE ( rnk , 3, nr )) nr3,MAX(DECODE ( rnk , 3, lbl )) lbl3
FROM
(select pop.*,dense_rank() over (order by nr,lbl) as rnk from (
SELECT id , nr, lbl,
row_number() OVER ( partition by id order by nr) rn
FROM tabd) pop order by id,rn)
GROUP BY id;https://stackoverflow.com/questions/64577651
复制相似问题