我正在尝试将不同的行合并为一个,因为它们具有相同的ID但不同的列值.
例如 :
(table1)
id colour
1 red
1 blue
2 green
2 red
Run Code Online (Sandbox Code Playgroud)
我希望这个结合起来,结果是:
id colour1 colour2
1 red blue
2 green red
Run Code Online (Sandbox Code Playgroud)
要么
id colour
1 red, blue
2 green, red
Run Code Online (Sandbox Code Playgroud)
或者上面的任何其他变化,以便行以某种方式连接在一起.
任何帮助,将不胜感激!提前致谢.
小智 4
请先阅读我的评论 - 你甚至不应该考虑这样做,除非它仅用于报告目的,并且你想了解如何在纯 SQL 中完成此操作(而不是正确的解决方案,即使用你的报告用于这项工作的工具)。
第二种格式是最简单的,特别是如果您不关心颜色出现的顺序:
select id, listagg(colour, ', ') within group (order by null)
from table1
group by id
Run Code Online (Sandbox Code Playgroud)
order by null意思是随机排序。如果您想按其他方式订购,请使用order bywith listagg()。例如,要按字母顺序对颜色进行排序,您可以说within group (order by colour)。
对于第一种格式,您需要对列数有一个先验限制,并且如何做到这一点取决于您正在使用的 Oracle 版本(您应该始终将其包含在您在此处和其他讨论板上发布的每个问题中) )。这个概念被称为“旋转”;从版本 11 开始,Oracle 有一个显式的 PIVOT 运算符可供您使用。