oracle怎么多行转一行

Oracle多行转一行

在日常使用数据库时,有时候需要将多行数据合并成为一行进行处理。这时候我们就需要用到Oracle的多行转一行操作。本文将为大家介绍多行转一行的具体方法。

方法一:使用LISTAGG函数

LISTAGG函数是Oracle 11g新引入的一个字符串聚合函数,可以将多行字符数据合并成一个长字符串。以LISTAGG函数为例,具体语法如下:

LISTAGG(column, separator) WITHIN GROUP (ORDER BY column)

其中,column为合并字段,separator为分隔符,ORDER BY column为排序条件。

假设我们有如下学生数据表,需要将同一学生的成绩合并成一行,用逗号隔开:

姓名 成绩
张三 80
张三 90
李四 70
李四 75

使用LISTAGG函数的SQL语句如下:

SELECT name, LISTAGG(score, ',') WITHIN GROUP (ORDER BY score DESC) AS scores

FROM student

GROUP BY name;

运行结果如下:

姓名 成绩
张三 90,80
李四 75,70

可以看到,我们成功将同一学生的成绩合并成了一行,并用逗号隔开。

方法二:使用WM_CONCAT函数

除了LISTAGG函数,我们也可以使用WM_CONCAT函数将多行数据合并成一行。不过需要注意的是,WM_CONCAT函数在Oracle 11gR1及以后的版本中已被禁用,需要手动开启才能使用。

具体使用方法如下:

SELECT name, WM_CONCAT(score) AS scores

FROM student

GROUP BY name;

运行结果与LISTAGG函数相同:

姓名 成绩
张三 80,90
李四 75,70

总结

本文介绍了两种将多行数据合并成一行的方法:使用LISTAGG函数和WM_CONCAT函数。需要注意的是,WM_CONCAT函数在Oracle 11gR1及以后的版本中已被禁用,需要手动开启才能使用。在实际开发中,我们需要根据具体情况选择合适的方法进行处理。

学会多行转一行,能够帮助我们更方便地处理数据,提高工作效率。

数据库标签