把一个查询结果,三列,多条记录,拼接成一条记录

muczhoubin 2013-05-09 11:19:06
在晚上找了很久,在其他数据库中这个功能很好实现,但是在GREENPLUM数据库中一直找不到合适的方法,希望高手指教~~~要求如题~~
要,最好不要使用临时表~~~感谢
...全文
901 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
懒得去死 2013-12-31
度娘搜索“POSTGRESQL GROUP_CONCAT”实现方法。
回复
jjxliu306 2013-05-15
上面运行后的结果是 : NOTICE: text :11-22 利率: 11;22-33 利率: 22;33-44 利率: 33;
回复
jjxliu306 2013-05-15
可以先转 array 再转 string 给你看个DEMO do $$ declare recs record; begin drop table if exists test; create temporary table test( col1 varchar, col2 varchar, value integer ); insert into test values('11' , '22' , 11); insert into test values('22' , '33' , 22); insert into test values('33' , '44' , 33); -- sql : select array_to_string(array_agg(col1 || '-' || col2 || ' - ' || value)) from test for recs in select array_to_string(array_agg(col1 || '-' || col2 || ' 利率: ' || value) , ';') || ';' as t from test loop raise notice ' text :%' , recs.t; end loop; end; $$
回复
muczhoubin 2013-05-10
引用 1 楼 WWWWA 的回复:
举例说明要求,数据库是POSTGRESQL?
不是,是GreenPlum数据库 一个基于PostGresQL的数据库 要求就是 col1 col2 col3 201204 201305 3.2 201306 201308 3.9 201309 201311 305 想到得到的结果是:201204——201305 利率3.2;201306——201308 利率3.9;201309——201311利率3.5; GreenPlum数据空中没有直接的行转列函数,调用函数式不能作为一个select的子查询: 所以是相当难啊,现在我用游标解决,但是速度很慢
回复
muczhoubin 2013-05-10
引用 1 楼 WWWWA 的回复:
举例说明要求,数据库是POSTGRESQL?
您这太简单了 答非所问啊 你这是拼接列,不是拼接行记录啊
回复
muczhoubin 2013-05-10
引用 楼主 muczhoubin 的回复:
在晚上找了很久,在其他数据库中这个功能很好实现,但是在GREENPLUM数据库中一直找不到合适的方法,希望高手指教~~~要求如题~~ 要,最好不要使用临时表~~~感谢
不是,是GreenPlum数据库 一个基于PostGresQL的数据库 要求就是 col1 col2 col3 201204 201305 3.2 201306 201308 3.9 201309 201311 305 想到得到的结果是:201204——201305 利率3.2;201306——201308 利率3.9;201309——201311利率3.5; GreenPlum数据空中没有直接的行转列函数,调用函数式不能作为一个select的子查询: 所以是相当难啊,现在我用游标解决,但是速度很慢
回复
clqaitxp 2013-05-10
select column_a||'-'||column_b||'*||column_c from table; 或者用concat函数
回复
WWWWA 2013-05-10
举例说明要求,数据库是POSTGRESQL?
回复
相关推荐
发帖
PostgreSQL
创建于2012-11-23

801

社区成员

PostgreSQL相关内容讨论
申请成为版主
帖子事件
创建了帖子
2013-05-09 11:19
社区公告
暂无公告