3

鉴于此查询:

select distinct subject_key
from mytable

结果:

subject_key
-----------
90896959
90895823
90690171
90669265
90671321

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

subject_key
-----------
90896959,
90895823,
90690171,
90669265,
90671321

谢谢大家!我是否希望改变输出而不是像下面这样。我怎么写呢,同一个平台。谢谢。

subject_key
90896959,  90895823, 90690171,  90669265, 90671321
4

2 回答 2

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;

然后你会像这样使用它:

SELECT get_subjectkey(?) AS subject_key
  FROM DUAL

...替换“?” 与主键值。

之前

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

SELECT DISTINCT TO_CHAR(subject_key) || ','
  FROM MYTABLE

双管——“||” -- 是 Oracle [,PostgreSQL and now ANSI] 在 SQL 中连接字符串的方法。我使用 TO_CHAR 显式转换数据类型,但您可以使用:

SELECT DISTINCT subject_key || ','
  FROM MYTABLE

...如果这不是必要的。

于 2010-11-11T17:35:36.683 回答
-2

最有可能:SELECT subject_key + ',' AS subject_key FROM mytable

至少在 T-SQL 中是这样的。PL-SQL 可能略有不同。

于 2010-11-11T17:35:42.397 回答