SQL 中的列转行

来源:互联网 发布:怎样练好英语听力 知乎 编辑:程序博客网 时间:2024/06/05 14:06

在工作中,经常遇到需要列转行的操作。比如:

+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200  |
|3 | 500  |
+------+------+

我们需要达到以下的效果:
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
在MYSQL和oracle中,已经有实现好的函数。

MYSQL:select id,group_concat(name) from aa group by id;

Oracle:select id,wm_concat(name) from aa group by id;

在PostGreSQL中,没有现成的函数,需要我们自己手动书写:

首先 创建一个自建函数:

CREATE AGGREGATE group_concat(anyelement)

(

sfunc = array_append, -- 每行的操作函数,将本行append到数组里

stype = anyarray, -- 聚集后返回数组类型

initcond = '{}' -- 初始化空数组

);

PostgreSQL: select id,group_concat(name) from aa group by id;


上一条、SQL查询出来的是数组,需要将数组转变为String。使用下面的语句,即可

select id, array_to_string(group_concat(name), ',') from aa group by id;

即可实现。


0 0