鉴于此查询:
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
答案 0 :(得分:6)
Oracle没有类似MySQL的GROUP_CONCAT这样的功能,这正是您要求的功能。 Various options for such string aggregation are provided on this page - 一个是使用自定义函数:
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和现在的ANSI]在SQL中连接字符串的方法。我使用TO_CHAR显式转换数据类型,但您可以使用:
SELECT DISTINCT subject_key || ','
FROM MYTABLE
......如果没有必要的话。
答案 1 :(得分:-2)
最有可能:SELECT subject_key +','AS subject_key FROM mytable
至少在T-SQL中是这样的。 PL-SQL可能略有不同。