【问题标题】:Oracle Sql non duplicate column dataOracle Sql 非重复列数据
【发布时间】:2021-05-16 06:12:40
【问题描述】:

我想生成这种格式的数据 r_regionkey r_name: list of n_name

例子:

0 Africa: Algeria, Ethiopia, kenya ...
1 America: argentina,brazil ...

但是我当前的代码会产生这个输出:

0Africa: algeria   ,  0Afria : Ethiopia
1America: argentina   1America: brazil

如果有人可以帮助我,谢谢。

下面是我的代码

create or replace function LISTNATION (region_name varchar2)
return varchar2 is
    myOutput varchar2(10000);
begin
    myOutput := '';
    for curNation in (select r_regionkey, r_name,n_name
                      from region, nation
                      where r_regionkey = n_regionkey)
    loop
        myOutput := myOutput||curNation.r_regionkey||curNation.r_name|| ':'||curNation.n_name || ',' ;
    end loop;
    return trim(myOutput);
end LISTNATION;
/

select listnation('EUROPE') from dual;

【问题讨论】:

    标签: sql database oracle


    【解决方案1】:

    我想你可能需要 LISTAGG。将您的代码更新为 -

    CREATE OR REPLACE FUNCTION LISTNATION (region_name VARCHAR2)
    RETURN VARCHAR2 IS
      myOutput VARCHAR2(10000);
    BEGIN
      myOutput := '';
      FOR curNation IN (SELECT r_regionkey, r_name, LISTAGG(n_name, ',') WITHIN GROUP (ORDER BY n_name) n_name
                          FROM region, nation
                         WHERE r_regionkey = n_regionkey
                         GROUP BY r_regionkey, r_name) LOOP
         myOutput := myOutput || curNation.r_regionkey || curNation.r_name || ':' || curNation.n_name;
         END LOOP;
       RETURN TRIM(myOutput);
    END LISTNATION;
    /
    

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 2019-04-09
      • 1970-01-01
      • 2018-06-11
      • 2014-02-01
      • 2021-06-09
      相关资源
      最近更新 更多