query 질문입니다. 0 6 1,601

by sendo [SQL Query] 쿼리 [2012.03.07 16:45:49]



안녕하세요.
쿼리 질문 좀 드리겠습니다.
검색해 볼려고 해도 무슨 키워드로 해야될지 감이 안오네요.

과목별로 강사는 1명을 등록할 수 도 있고 2명,3명 등록 가능합니다
이 강사정보를 과목별로 한 컬럼에 넣고 싶습니다..콤마같은 구분자를 넣을 수 있다면 넣고 싶습니다.

우선 테이블을 말씀드리면

과목정보
-------------------------- 
과목코드 | 과목명
-------------------------
1234 | 회계원리
2345 | 재무관리



과목별 강사정보
-----------------------------
과목코드 | 강사번호
------------------------------
1234 | 0001
1234 | 0002
2345 | 0003



강사정보
-----------------------------
강사번호 | 강사명
------------------------------
0001 | 홍길동
0002 | 홍길서
0003 | 홍길남


아래와 같이 데이터를 뽑고 싶습니다.
-----------------------------------------
과목코드 | 과목명 | 강사명
------------------------------------------
1234 | 회계원리 | 홍길동 홍길서
2345 | 재무관리 | 홍길남


도움 부탁드립니다.
by 박상준 [2012.03.07 17:23:24]
데이터 넣기가 귀찮아서;;; 테스트는 못해봤는데 XMLAGG와 XMLELEMENT 함수를 사용하시면 될 거 같습니다.

SELECT A.과목코드, B.과목명, 
             REPLACE((XMLAGG(XMLELEMENT("nm" ', ' || C.강사명))).EXTRACT('//text()').GetStringVal(), ', , ', NULL) AS 강사명
    FROM 과목별강사정보 A, 과목정보 B, 강사정보 C
 WHERE A.과목코드 = B.과목코드(+)
       AND A.강사정보 = C.강사번호(+)   
 GROUP BY A.과목코드, B.과목명

by 마농 [2012.03.07 17:34:12]
WITH 과목정보(과목코드, 과목명) AS
(
SELECT '1234', '회계원리' FROM dual
UNION ALL SELECT '2345', '재무관리' FROM dual
UNION ALL SELECT '6789', '신설과목' FROM dual
)
, 과목별강사정보(과목코드, 강사번호) AS
(
SELECT '1234', '0001' FROM dual
UNION ALL SELECT '1234', '0002' FROM dual
UNION ALL SELECT '2345', '0003' FROM dual
)
, 강사정보(강사번호, 강사명) AS
(
SELECT '0001', '홍길동' FROM dual
UNION ALL SELECT '0002', '홍길서' FROM dual
UNION ALL SELECT '0003', '홍길남' FROM dual
)
SELECT a.과목코드, a.과목명
     , wm_concat(c.강사명) 강사명
  FROM 과목정보 a
     , 과목별강사정보 b
     , 강사정보 c
 WHERE a.과목코드 = b.과목코드(+)
   AND b.강사번호 = c.강사번호(+)
 GROUP BY a.과목코드, a.과목명
 ORDER BY a.과목코드, a.과목명
;

by 느훼훼 [2012.03.07 17:44:11]
저걸 10g 이상에서만 사용할 수 있는 함수를 안쓰고 해야된다면 어떻게 해야될까요?
WM_CONCAT() 함수의 내부는 어떻게 짜여있는지 정말 궁금하네요~

by 박상준 [2012.03.07 17:54:22]
우왕 WM_CONCAT 강력하네요!!! 괜히 XMLELMENT 로 뻘짓할 거 없네요!

by 마농 [2012.03.07 18:11:52]

XMLAGG 는 9i 에서도 돌아갑니다.

row_number 로 번호 부여해서 sys_connect_by_path 를 이용하는 방법도 있죠.

by sendo [2012.03.07 19:09:19]

박상준님,마농님 답변 감사합니다~
이런 방법이 있군요.

복 받으세요~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입