쿼리 조언 부탁드려요 0 12 788

by 가을에사랑 [2017.10.25 13:59:13]


원하는 아래의 쿼리 결과

MEMBERID NAME DEPTNAME
0000003841/0000009358 홍길동/김유신 총무부/기획부

SELECT
    T.*,
    (SELECT DEPTNAME FROM MEMBER M WHERE M.MEMBERID = T.MEMBERID) DEPTNAME
FROM
(
    SELECT '0000003841/0000009358' MEMBERID, '홍길동/김유신' NAME FROM DUAL
) T

by jkson [2017.10.25 14:42:21]
select t.*
    , (select listagg(deptname, '/') within group (order by instr(t.memberid, m.memberid))
         from member m
        where instr(t.memberid, m.memberid) > 0) deptname
  from (select '0000003841/0000009358' memberid, '홍길동/김유신' name
          from dual) t

 


by 가을에사랑 [2017.10.25 14:52:37]

감사합니다.

그런데 listagg를 보니 혹시 10g에서는 안되는 쿼리인가요? ^^;;;;

listagg는 11g에서 사용하는걸로 알고 있어서..

제가 10g라고 안 써놓은게 실수네요 죄송합니다.;;


by jkson [2017.10.25 15:01:20]
select t.*
    , (select substr(xmlagg(xmlelement(x, '/', deptname) order by instr(t.memberid, m.memberid)).extract('//text()'), 2)
         from member m
        where instr(t.memberid, m.memberid) > 0) deptname
  from (select '0000003841/0000009358' memberid, '홍길동/김유신' name
          from dual) t;

 


by 가을에사랑 [2017.10.25 15:55:35]

신경써주셔서 감사드립니다.


by 우리집아찌 [2017.10.25 14:50:01]

SELECT '0000003841/0000009358' MEMBERID, '홍길동/김유신' NAME FROM DUAL <= 이렇게 조건이 들어오나요?


by 가을에사랑 [2017.10.25 15:02:32]

사실 조건값은 id만 나열되어 있습니다. id를 가지고 member테이블에서 이름, 부서명을 조회하는 것이구요...


by 우리집아찌 [2017.10.25 15:22:58]

아이디값으로 조인하신후 합치세요.


by jkson [2017.10.25 15:06:21]

http://www.gurubee.net/article/69729

문자열 합치는 것은 저번에도 물어보셨던 것 같은데

답변만 얻고 따로 공부 안 하시면 실력 안 늘어요..


by 가을에사랑 [2017.10.25 15:53:03]

알고 있어요

이번 질문은 문자열 합치는 것을 여쭤본게 아니구요...

아이디가 한 문자열로 합쳐있는것을 끊어서 조회하는 방법을 연구하다가 

잘 해결되지 않아서 올린거에요. 죄송합니다.

ㅠㅠ


by 마농 [2017.10.25 15:51:58]
WITH member AS
(
SELECT '0000003841' memberid, '홍길동' name, '10' deptid FROM dual
UNION ALL SELECT '0000009358', '김유신', '20' FROM dual
)
, dept AS
(
SELECT '10' deptid, '총무부' deptname FROM dual
UNION ALL SELECT '20', '기획부' FROM dual
)
, data_t AS
(
SELECT '0000003841/0000009358' memberid FROM dual
)
SELECT a.memberid
     , SUBSTR(XMLAGG(XMLELEMENT(x, '/', b.name)
       ORDER BY INSTR(a.memberid, b.memberid)).EXTRACT('//text()'), 2) name
     , SUBSTR(XMLAGG(XMLELEMENT(x, '/', c.deptname)
       ORDER BY INSTR(a.memberid, b.memberid)).EXTRACT('//text()'), 2) deptname
  FROM data_t a
     , member b
     , dept   c
 WHERE INSTR(a.memberid, b.memberid) > 0
   AND b.deptid = c.deptid
 GROUP BY a.memberid
;

 


by 가을에사랑 [2017.10.25 15:54:22]

감사합니다. 


by jkson [2017.10.25 16:09:54]

지난 글에 문자열 합치는 것을 버전별로 알려드린 내역이 있어 말씀드린 겁니다.

listagg가 11g부터 되는 것도 알고 계셨고 다른 버전별로 어떻게 합치는지

이미 지난 글에서 읽어보셨을텐데.. 방법을 모르시는 것 같아 드린 말씀이예요.

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