我有一个关于表中多行注释的问题,我需要通过SQL提取为单个字符串。我有两个表:测试和评论。以下是我正在寻找的所需结果集的示例数据:
老实说,如果没有PL / SQL或某种形式的外部编程语言,我甚至不确定我能找到什么。我一直在与连接争吵,没有运气。任何帮助将不胜感激。
编辑:我应该提一下,每个comment_key值的result_key值的数量是可变的,并且该字符串格式无关紧要(间距等)。所以,简而言之,Result_Text(n)+ Result_Text(n + 1)+ ...
答案 0 :(得分:0)
select
id,
name,
replace(replace(wmsys.wm_concat(replace(result_text, ',', chr(1)),
',', ' '), chr(1), ',') as Comment
from (
select id, name, result_text
from test left join comment using(comment_key)
order by id, result_key
)
group by id, name
order by id
答案 1 :(得分:0)
有关以下查询的演示,请参阅SQL Fiddle:
SELECT Test.ID, Test.Name,
get_comma_separated_value(Test.ID) AS CommConcat
FROM Test
哦,根据您为 英语 提供的信息,您的结果只会是English comment.
。
以下是函数get_comma_separated_value
的声明:
CREATE OR REPLACE FUNCTION get_comma_separated_value (input_val in VARCHAR2)
RETURN VARCHAR2
IS
return_text VARCHAR2(10000) := NULL;
BEGIN
FOR x IN
(
SELECT Result_Text
FROM Test
INNER JOIN Comments ON Test.Comment_Key = Comments.Comment_Key
WHERE Test.ID = input_val
ORDER BY Comments.Result_Key
)
LOOP
return_text := return_text || ' ' || x.Result_Text ;
END LOOP;
RETURN LTRIM(return_text, ' ');
END;
/