회원번호 | 성별 | 특이사항 | 상담내용 |
1 | M | 없음 | 상담11///상담222 |
2 | F | 있음 | 상담333///상담444 |
안녕하세요.
쿼리 SELECT하는데 어려움이 있어 글남겨드립니다.
MEMBER에 회원번호, 성별
SEEKER에 특이사항
COUNSEL에 상담내용이 있습니다.
다른값들은 로우마다 하나씩있어서 상관없는데 상담내용이 한로우에 여러개가 있습니다.
그래서 한줄로 뽑으려고 상담내용을 ///구분자로 뽑으려고 아래 쿼리로 돌리면 값이 나오긴합니다.
SELECT M.memb_no,M.NAME, S.SPEC_CONT ,LISTAGG(C.COUNS_CONT,'///') WITHIN GROUP(ORDER BY C.JS_NUM, C.JS_YYYYMM) AS cont FROM MEMBER M, SEEKER S , COUNSEL C WHERE S.MEMB_NO = M.MEMB_NO AND S.JS_NUM = C.JS_NUM AND S.JS_YYYYMM = C.JS_YYYYMM AND SUBSTR(S.WISH_DT,0,4) = '2011' AND SUBSTR(S.WISH_DT,5,2) BETWEEN '01' AND '12' GROUP BY M.memb_no,M.NAME, S.SPEC_CONT
1. SELECT는 되는데 전체조회시 result of string concatenation is too long 에러가 나옵니다.
상담내용부분때문인거같은데 글자수가 초과되어서 그런건가요? 아니면 다른이유때문인가요?
SELECT m.memb_no , m.name , s.spec_cont -- 4000 Byte 초과시 오류 발생 -- -- , LISTAGG(c.couns_cont, '///') WITHIN GROUP(ORDER BY c.js_num, c.js_yyyymm) AS cont , SUBSTR( XMLAgg(XMLElement(x, '///', c.couns_cont) ORDER BY c.js_num, c.js_yyyymm) .Extract('//text()').getCLOBval() , 4) AS cont FROM member m , seeker s , counsel c WHERE s.memb_no = m.memb_no AND s.js_num = c.js_num AND s.js_yyyymm = c.js_yyyymm AND s.wish_dt LIKE '2011%' -- AND SUBSTR(s.wish_dt, 1, 4) = '2011' -- 컬럼 가공은 안좋음 -- AND SUBSTR(s.wish_dt, 5, 2) BETWEEN '01' AND '12' -- 당연한 조건은 굳이 안줘도 됨 GROUP BY m.memb_no, m.name, s.spec_cont ; -- http://gurubee.net/article/55512