LPAD 질문 0 8 933

by GKDLDYD [Oracle 기초] [2022.07.18 10:02:48]


안녕하세요

SELECT LPAD(' ',2*(A.DEPT_LVL-1))||DEPT_NM ,DEPT_LVL
FROM CM_MS_DEPT  
START WITH DEPT_LVL = 0
CONNECT BY PRIOR DEPT_ID=UP_DEPT_ID

이런식으로 순위에 따라
그안에 
SELECT 
A.USER_NAME
,B.JIKGUB_NM
,C.TEAM_NM
FROM TBINSA A, TBJIKGUB B, TBTEAM C
WHERE JIKGUB_NO=B.JIKGUB_NO
AND TEAM_CD=C.TEAM_CD
dept_nm에 따라서 select 문의 team_nm과 dept_nm이 같을때  
출력하고 싶은데 그런것이 가능한가요 ㅜㅜ 조직도 처럼 출력이 될까요
 

by 마농 [2022.07.18 10:16:47]

tbteam 과 cm_ms_dept 가 다른 테이블 인가요?
tbteam 에는 lvl 항목이 없나요?
team_cd 와 dept_id 로 연결하면 되나요?


by GKDLDYD [2022.07.18 10:40:21]

답변감사드립니다.

tbteam과 cm_ms_dept는 다른테이블입니다. tbteam에는 lvl항목이 없고 cm_ms_Dept에만 있습니다.

team_cd 와 dept_id 로 연결하면 되나요? 아니요 둘은 달라라서 연결을 하려면 

DEPT_NM = U.TEAM_NM u는 select 문입니다.

cm_ms_dept 에 dept_type과 tbinsa 테이블에 tam_cd를 연결해주어햐 할것같습니다.
그런데 이걸 어어떤식으로 연결을 해야할까요 
SELECT LPAD(' ',2*(DEPT_LVL-1))||DEPT_NM ,DEPT_LVL
FROM CM_MS_DEPT  ,
(SELECT 
A.USER_NAME
,B.JIKGUB_NM
,C.TEAM_NM
FROM TBINSA A, TBJIKGUB B, TBTEAM C
WHERE A.JIKGUB_NO=B.JIKGUB_NO
AND A.TEAM_CD=C.TEAM_CD) U
WHERE DEPT_NM = U.TEAM_NM
START WITH DEPT_LVL = 0
CONNECT BY PRIOR DEPT_ID=UP_DEPT_ID
이런식으로 하면 아무것도 안나와서용


by 마농 [2022.07.18 10:44:12]

dept_type 과 tam_cd 에 대한 설명도 해주세요.
tam_cd 가 team_cd 의 오타는 아닌지?
dept_type 은 어떤 항목인지? 왜 연결해야 하는지?

그리고, 이름으로 연결하면 중복 가능성이 있을 텐데요?
예를 들면 각 지사별로 총무부가 존재한다면?


by GKDLDYD [2022.07.18 10:49:11]

DEPT_TYPE과 TEAM_CD는 둘다 팀코드를 나타내고 있는데 컬럼명이 다르게 되어있습니다.

음일단 저희회사는 중복은 없어서요 ... 일단은 그렇게 해보았습니다.TEAM_CD가 맞습니다. 오타입니다.... SELECT 문과 LPDA를 합치과시ㅠ어서dept_type WHERE 절에 넣는 다고생각했습니다.


by 마농 [2022.07.18 11:02:03]

그럼 dept_nm 이 아닌 dept_type 으로 연결하면 되죠.


by 마농 [2022.07.18 11:11:37]
SELECT a.user_name
     , b.jikgub_nm
     , c.team_nm
     , d.dept_nm_1
     , d.dept_nm_2
  FROM tbinsa a
     , tbjikgub b
     , tbteam c
     , (SELECT dept_type
             , dept_id
             , dept_nm                                                 -- 부서명
             , LPAD(' ', 2*(dept_lvl-1)) || dept_nm         dept_nm_1  -- 들여쓰기
             , SUBSTR(SYS_CONNECT_BY_PATH(dept_nm, '/'), 2) dept_nm_2  -- 풀네임
             , dept_lvl
             , ROWNUM rn
          FROM cm_ms_dept
         START WITH dept_lvl = 0
         CONNECT BY PRIOR dept_id = up_dept_id
        -- ORDER SIBLINGS BY dept_order    -- 직제 순서
        ) d
 WHERE a.jikgub_no = b.jikgub_no
   AND a.team_cd = c.team_cd
   AND a.team_cd = d.dept_type
-- ORDER BY d.rn, a.jikgub_no, a.emp_no    -- 직제 순 출력
;

 


by GKDLDYD [2022.07.18 11:23:15]

감사합니다 ㅜㅜ 많이 배웠습니다


by 마농 [2022.07.18 15:17:16]
-- 직제순 출력이 필요 없이 들여쓰기 기능만 필요하다면?
-- 굳이 계층쿼리 전개할 필요가 없습니다.

SELECT a.user_name
     , b.jikgub_nm
     , c.team_nm
     , LPAD(' ', 2*(d.dept_lvl-1)) || d.dept_nm dept_nm
  FROM tbinsa     a
     , tbjikgub   b
     , tbteam     c
     , cm_ms_dept d
 WHERE a.jikgub_no = b.jikgub_no
   AND a.team_cd = c.team_cd
   AND a.team_cd = d.dept_type
;

 

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