0

SQL を介して単一の文字列として抽出する必要がある、テーブル内の複数行のコメントに関する問題があります。テストとコメントの 2 つのテーブルがあります。私が探している望ましい結果セットを持つそれぞれのデータの例を次に示します。

ここに画像の説明を入力

PL/SQL や何らかの形式の外部プログラミング言語がなくても、私が探しているものが可能かどうかは正直わかりません。私は少しの間コネクトバイで馬上槍試合をしてきましたが、運がありませんでした. どんな助けでも大歓迎です。

編集: comment_key 値ごとの result_key 値の数は可変であり、その文字列形式は問題ではありません (間隔など)。つまり、一言で言えば、Result_Text(n)+Result_Text(n+1)+...

4

2 に答える 2

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 に答える
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 に答える