Oracle多行列值拼接并保留原行的SQL实现求助
解决方案
可以使用分析函数版的LISTAGG直接实现需求,无需单独聚合后关联,在原表基础上即可生成每个PID对应的完整拼接文本:
SELECT pid, LISTAGG("Desc", ' ') WITHIN GROUP (ORDER BY seq) OVER (PARTITION BY pid) AS Desc1, "Desc" AS Desc2 FROM A ORDER BY pid, seq;
说明:
LISTAGG(...) OVER (PARTITION BY pid):将每个PID分组内的所有Desc字段按seq顺序拼接,作为每条记录的Desc1- 直接保留原表的
Desc字段作为Desc2 - 最后按
pid和seq排序,确保结果顺序与目标输出一致
执行该语句后,输出结果与目标格式完全匹配(注:原表中A的第三条Desc为day.,目标输出中误写为day!,执行结果将以原表数据为准):
PID Desc1 Desc2
A Have a nice day. Have
A Have a nice day. a nice
A Have a nice day. day.
B Nice Work. Nice Work.
C Yes we can do this work! Yes
C Yes we can do this work! we can
C Yes we can do this work! do
C Yes we can do this work! this work!
内容的提问来源于stack exchange,提问作者Arpit Shukla
相关产品推荐
相关产品推荐

