问题描述
嗨,汤姆,
是否可以仅透视给定列中具有重复值的记录。
这是场景
创建表测试 (id号,cname varchar2(10),cvalue varchar2(10))
插入测试值 (1,'a','10');
插入测试值 (2,'b','20');
插入测试值 (3,'D','45 ');
插入测试值 (4,'D','50');
插入测试值 (5,'e','70');
从测试中选择 *
id cname值
--- ----- -------
1 a 10
2 b 20
3 D 45 ***
4 D 50 ***
5 e 70
是否可以编写一个查询来仅根据cname列对重复的记录进行透视
cname值
a 10
b 20
D 45,50 =========================> 值D重复两次,因此旋转仅获得一条记录。
e 70
提前谢谢。
是否可以仅透视给定列中具有重复值的记录。
这是场景
创建表测试 (id号,cname varchar2(10),cvalue varchar2(10))
插入测试值 (1,'a','10');
插入测试值 (2,'b','20');
插入测试值 (3,'D','45 ');
插入测试值 (4,'D','50');
插入测试值 (5,'e','70');
从测试中选择 *
id cname值
--- ----- -------
1 a 10
2 b 20
3 D 45 ***
4 D 50 ***
5 e 70
是否可以编写一个查询来仅根据cname列对重复的记录进行透视
cname值
a 10
b 20
D 45,50 =========================> 值D重复两次,因此旋转仅获得一条记录。
e 70
提前谢谢。
专家解答
是的,一个简单的LISTAGG就能解决问题
SQL> create table test(id number, cname varchar2(10), cvalue varchar2(10)); Table created. SQL> SQL> SQL> SQL> insert into test values(1, 'a', '10'); 1 row created. SQL> SQL> insert into test values(2, 'b', '20'); 1 row created. SQL> SQL> insert into test values(3, 'D', '45'); 1 row created. SQL> SQL> insert into test values(4, 'D', '50'); 1 row created. SQL> SQL> insert into test values(5, 'e', '70'); 1 row created. SQL> SQL> select cname, listagg(cvalue,',') within group ( order by id ) as dup 2 from test 3 group by cname 4 order by lower(cname); CNAME DUP ---------- ------------------------------ a 10 b 20 D 45,50 e 70
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




