2014-02-18 10 views
0

SQL을 통해 단일 문자열로 추출해야하는 테이블에 다중 행 주석 관련 문제가 있습니다. 두 가지 테이블이 있습니다 : 테스트와 코멘트. 솔직히 내가 무엇을 찾고 있어요 것은 PL/SQL 또는 어떤 형태의없이 가능하면 모르겠어요중첩 된 문자열 값을 연결하는 Oracle (이전 11g)의 반복 가능한 쿼리

enter image description here

: 여기에 내가 찾고 원하는 결과 집합 각각에 대한 몇 가지 예를 들어 데이터의 외부 프로그래밍 언어. 나는 마주 쳤다. 조금만 더 가면 운이 없다. 어떤 도움이라도 대단히 감사하겠습니다.

편집 : comment_key 값당 result_key 값의 개수는 가변적이며 문자열 형식은 중요하지 않습니다 (간격 등). 에 기초하여,

SELECT Test.ID, Test.Name, 
    get_comma_separated_value(Test.ID) AS CommConcat 
FROM Test 

오 : 그래서, 간단히 말해서, Result_Text (N) + Result_Text (N + 1) + ...

답변

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 
0

다음 쿼리의 데모 SQL Fiddle를 참조하십시오 영어에 제공된 정보는 English comment.입니다.

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; 
/
+0

나는 불행하게도에서 일하고 있어요 데이터베이스를 수정할 수 없습니다, 그래서 아무 사용자 정의 함수 : 여기

함수 get_comma_separated_value의 선언입니다. 다른 DB로 내보낼 수 있지만 그렇게하기 전에 적절한 SQL 메서드가 있는지 알고 싶습니다. 에고 르의 대답은 나에게 올바른 길을 가고있다. 도움을 주셔서 감사합니다! (또한, 나는 당신의 교정 당 샘플 텍스트를 수정했다.) – user2664961