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及以后的版本中已被禁用,需要手动开启才能使用。在实际开发中,我们需要根据具体情况选择合适的方法进行处理。
学会多行转一行,能够帮助我们更方便地处理数据,提高工作效率。