在Oracle中添加逗号(,)

joe*_*joe 3 sql string oracle oracle8i

鉴于此查询:

select distinct subject_key
from mytable
Run Code Online (Sandbox Code Playgroud)

结果:

subject_key
-----------
90896959
90895823
90690171
90669265
90671321
Run Code Online (Sandbox Code Playgroud)

如何在Oracle中编写查询(使用Aqua Data Studio后端Oracle 8i)结果:

subject_key
-----------
90896959,
90895823,
90690171,
90669265,
90671321
Run Code Online (Sandbox Code Playgroud)

谢谢大家!我是否希望改变输出而不是如下所示.我怎么写它,同一个平台.谢谢.

subject_key
90896959,  90895823, 90690171,  90669265, 90671321
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 6

Oracle没有像MySQL的GROUP_CONCAT这样的功能,这正是您要求的功能. 此页面提供了此类字符串聚合的各种选项 - 一种是使用自定义函数:

CREATE OR REPLACE FUNCTION get_subjectkey (IN_PK IN MYTABLE.PRIMARY_KEY%TYPE)
RETURN VARCHAR2
IS
  l_text  VARCHAR2(32767) := NULL;
BEGIN

  FOR cur_rec IN (SELECT subject_key 
                    FROM MYTABLE 
                   WHERE primary_key = IN_PK) LOOP
    l_text := l_text || ',' || cur_rec.ename;
  END LOOP;

  RETURN LTRIM(l_text, ',');
END;
Run Code Online (Sandbox Code Playgroud)

那你就像使用它一样:

SELECT get_subjectkey(?) AS subject_key
  FROM DUAL
Run Code Online (Sandbox Code Playgroud)

......取代"?" 使用主键值.

先前

假设您只想在列值的末尾添加逗号,请使用:

SELECT DISTINCT TO_CHAR(subject_key) || ','
  FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

双管 - "||" - 是Oracle [,PostgreSQL和现在的ANSI]在SQL中连接字符串的方法.我使用TO_CHAR显式转换数据类型,但您可以使用:

SELECT DISTINCT subject_key || ','
  FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)

......如果没有必要的话.