暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何将行合并到select中

askTom 2017-05-04
228

问题描述

嗨,汤姆,

create table test3
(name varchar2(10),
sub varchar2(10),
marks number
);

insert into test3 values('joe','maths',90);

insert into test3(sub,marks) values('social',80);

insert into test3(sub,marks) values('science',70);

insert into test3(sub,marks) values('english',70);

commit;

select * from test3;

NAME       SUB             MARKS
---------- ---------- ----------
joe        maths              90
           social             80
           science            70
           english            70
复制


我想获得如下输出

乔-数学: 90-社会: 80-科学: 70-英语: 70

您的帮助将不胜感激。
谢谢
加贾纳纳

专家解答

如果名称列为null,您如何知道英语,社会和科学属于joe?当您为Jeff (或其他任何人) 添加行时会发生什么?

不管怎样,你在listagg的轨道上是正确的。将第一个参数中的列连接在一起。并确保您选择中的任何列不在listagg中,都在您的组中,方法是:

create table test3
(name varchar2(10),
sub varchar2(10),
marks number
);

insert into test3 values('joe','maths',90);
insert into test3(sub,marks) values('social',80);
insert into test3(sub,marks) values('science',70);
insert into test3(sub,marks) values('english',70);

commit;

select listagg(decode(name, null, null, name || '-') || sub || ':' || marks,'-') 
         within group (order by name, sub) 
from   test3;

LISTAGG(DECODE(NAME,NULL,NULL,NAME||'-')||SUB||':'||MARKS,'-')WITHINGROUP(ORDERBYNAME,SUB)  
joe-maths:90-english:70-science:70-social:80 
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论