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

Oracle LISTAGG没有给出不同的值

askTom 2017-02-23
438

问题描述

嗨,伙计们,

如果我对单个表使用LISTAGG,它会在该列中给出距离值。但是,如果我通过连接多个表使用它,即使它们重复,它也会给出所有值。

场景:

创建表TEMP1(ID1号,TYPE1 CHAR(5));

插入TEMP1 (ID1,TYPE1) 值 (1,'t11');
插入TEMP1 (ID1,TYPE1) 值 (1,'t12');


创建表TEMP2(ID1号,TYPE2 CHAR(5));

插入TEMP2 (ID1,TYPE2) 值 (1,'t21');
插入TEMP2 (ID1,TYPE2) 值 (1,'t22');

下面的查询给出了col2中的不同值,我很擅长:
从TEMP1中选择组 (按类型1排序) 中的TEMP1.ID1,LISTAGG (类型1,',')
按TEMP1.ID1分组;

下面的查询给出了我不想要的col2中的所有值,这里我只想要来自LISTAGG函数的不同值。
从TEMP1,TEMP2中选择不同的TEMP1.ID1,LISTAGG (类型1,',') 组 (按类型1排序)
其中TEMP1.ID1 = TEMP2.ID1
按TEMP1.ID1分组;


谢谢!



专家解答

在当前版本的Oracle中,LISTAGG不支持DISTINCT,因此在应用listagg之前,您需要自己照顾distinct值。

这是一个例子


SQL> drop table t purge;

Table dropped.

SQL>
SQL> create table t (
  2    x int,
  3    v varchar2(10)
  4    );

Table created.

--
--  x=1 will be good stuff, x=2 will be bad stuff
--

SQL>
SQL> insert into t values (1,'John');

1 row created.

SQL> insert into t values (1,'Sue');

1 row created.

SQL> insert into t values (1,'Mark');

1 row created.

SQL>
SQL>
SQL> insert into t values (2,'John');

1 row created.

SQL> insert into t values (2,'Sue');

1 row created.

SQL> insert into t values (2,'John');

1 row created.

SQL> insert into t values (2,'Sue');

1 row created.

SQL> insert into t values (2,'Jane');

1 row created.

SQL>
SQL> select listagg(v,',') within group ( order by v )
  2  from t
  3  where x = 1;

LISTAGG(V,',')WITHINGROUP(ORDERBYV)
----------------------------------------------------------------------------------------------------------------------------------
John,Mark,Sue

1 row selected.

SQL>
SQL>
SQL> select listagg(v,',') within group ( order by v )
  2  from t
  3  where x = 2;

LISTAGG(V,',')WITHINGROUP(ORDERBYV)
----------------------------------------------------------------------------------------------------------------------------------
Jane,John,John,Sue,Sue

1 row selected.

SQL>
SQL> select listagg(v,',') within group ( order by v )
  2  from ( select distinct v from t where x = 2 );

LISTAGG(V,',')WITHINGROUP(ORDERBYV)
----------------------------------------------------------------------------------------------------------------------------------
Jane,John,Sue

1 row selected.

SQL>


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

评论