0

我有一个关于表中的多行注释的问题,我需要通过 SQL 将其提取为单个字符串。我有两个表:测试和评论。以下是我正在寻找的所需结果集的每个示例数据:

在此处输入图像描述

老实说,我什至不确定如果没有 PL/SQL 或某种形式的外部编程语言,我正在寻找的东西是否可能。我一直在与 connect by 较量,但没有运气。任何帮助将不胜感激。

编辑:我应该提到每个 comment_key 值的 result_key 值的数量是可变的,并且字符串格式无关紧要(间距等)。所以,简而言之,Result_Text(n)+Result_Text(n+1)+...

4

2 回答 2

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;
/
于 2014-02-18T20:22:32.790 回答
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
于 2014-02-18T20:12:44.650 回答