database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 38927 게시물 읽기
No. 38927
아래질문의 추가 정보 입니다.
작성자
김종열(bongji123)
작성일
2011-09-30 09:40ⓒ
2011-09-30 09:54ⓜ
조회수
5,078

 

 어제 급한 마음에 질문을 드려 정보가 많이 부족했습니다.

제가 글을 올려놓고도.. 이건 답변이 어렵겠다. 라는 생각이 들었습니다.^^

질문에 대한 추가 정보 입니다.

A 테이블 - 인사정보

사번       이름      입사일자       주소                     결혼유무           결혼기념일  

========================================================

0001     홍길동   20110101   서울시 영등포구   기혼         19991231 

 

B테이블 - 가족정보

사번   주민번호(가족구성원)    가족이름   가족관계

=======================================

0001   123456-7899999         홍길순         딸

0001   123456-7899998          홍길자        아들

0001   123456-7899888          홍말자        아들

 

C테이블 - 진급정보(History 성입니다.)

사번   이름   진급일자   직책    직책명

=================================

0001  홍길동  20110420   A20   주임

0001  홍길동  20110620   A30   대리

 

 

최종적으로 아래와 같은 데이터를 원하는데요,

 

사번       이름      입사일자       주소      결혼유무   결혼기념일   가족이름   가족관계       진급일자   직책    직책명

==================================================================================

0001     홍길동   20110101   서울시    기혼         19991231      홍길순       딸                  20110420   A20   주임

0001     홍길동   20110101   서울시    기혼         19991231      홍길자       아들               20110620   A30   대리

0001     홍길동   20110101   서울시    기혼         19991231      홍말자       아들

 

 

 

아래와 같이는 만들었는데...

사번       이름      입사일자       주소      결혼유무   결혼기념일   가족이름   가족관계       진급일자   직책    직책명

==================================================================================

0001     홍길동   20110101   서울시    기혼         19991231      홍길순       딸                  

0001     홍길동   20110101   서울시    기혼         19991231      홍길자       아들              

0001     홍길동   20110101   서울시    기혼         19991231      홍말자       아들

 

 

C Table 데이터를 가져올때

사번       이름      입사일자       주소      결혼유무   결혼기념일   가족이름   가족관계       진급일자   직책    직책명

==================================================================================

0001     홍길동   20110101   서울시    기혼         19991231      홍길순       딸                  20110420   A20   주임

0001     홍길동   20110101   서울시    기혼         19991231      홍길자       아들               20110420   A20   주임

0001     홍길동   20110101   서울시    기혼         19991231      홍말자       아들             20110420   A20   주임

0001     홍길동   20110101   서울시    기혼         19991231      홍길순       딸                  20110620   A30   대리

0001     홍길동   20110101   서울시    기혼         19991231      홍길자       아들               20110620   A30   대리

0001     홍길동   20110101   서울시    기혼         19991231      홍말자       아들               20110620   A30   대리

 

이렇게 중복되게 나오네요...

 

확인 좀 부탁드립니다.

 

제가 만든 쿼리문 입니다.  조언 부탁드립니다.

SELECT A.PR_SNO, A.PR_NAME, A.PR_ENTERDATE, A.PR_JUSO, A.PR_MARRY, A.PR_MARRYDATE, B.PF_NAME, B.PF_RELATION, B.PF_NO, C.PI_DATE, C.JK_NAME
FROM
 (
 SELECT PR_GUBUN, PR_SNO, PR_NAME, PR_ENTERDATE, PR_JUSO, PR_MARRY, PR_MARRYDATE
 FROM   H_PERSON
 WHERE  PR_OUTDATE = ' '
 ORDER BY PR_SNO
 ) A,
 (
 SELECT BA.PR_GUBUN, BA.PR_SNO, BB.PF_NO, BB.PF_NAME, BB.PF_RELATION
 FROM
  (
  SELECT *
  FROM   H_PERSON
  WHERE PR_OUTDATE=' '
  )BA,
  (
  SELECT PF_GUBUN, PF_SNO, PF_NO, PF_NAME, PF_RELATION
  FROM H_PR_FAMILY
  )BB
 WHERE BA.PR_GUBUN = BB.PF_GUBUN
 AND   BA.PR_SNO   = BB.PF_SNO(+)
    ORDER BY BA.PR_SNO
 ) B,
 
 (
 SELECT CA.PR_SNO, CA.PR_NAME, CB.PI_DATE, CB.PI_BJIKCHAK, CC.JK_NAME
 FROM
     (SELECT PR_SNO, PR_NAME
   FROM  H_PERSON
   WHERE PR_OUTDATE =' ')CA,
     (
  SELECT PI_SNO, MIN(PI_DATE) PI_DATE, PI_BJIKCHAK
  FROM H_PR_INSA
  GROUP BY PI_SNO, PI_BJIKCHAK
  )CB,
  (
  SELECT JK_NAME, JK_CODE
  FROM H_JIKCHAK
  GROUP BY JK_NAME, JK_CODE
  )CC
 WHERE  CA.PR_SNO = CB.PI_SNO(+)
 AND    CB.PI_BJIKCHAK = CC.JK_CODE(+)
 ORDER BY CA.PR_SNO, PI_DATE
 )C
 
WHERE A.PR_GUBUN = B.PR_GUBUN
AND   A.PR_SNO  = B.PR_SNO(+)
AND   A.PR_SNO   = C.PR_SNO(+)
AND   A.PR_NAME  = C.PR_NAME
AND   B.PR_SNO   = C.PR_SNO 

 

이 글에 대한 댓글이 총 3건 있습니다.

진급정보와 그외의 정보가 관련성이 없는 상황에서 데이터를 보여주려고 하면 여러가지 문제가 생길수 있겠네요

가족정보가 없는데 진급정보만 있을때 어떻게 나와야 할까요

 

샘플로 올리신건 가족정보의 수가 진급정보 수 보다 작기에 그럴듯하게 나오지만

결과셋자체가 정상적으로 나오기 힘들어보입니다.

뭐 결과를 만들려고 하면 못만드는것은 아니지만...

 

1님이 2011-09-30 11:14에 작성한 댓글입니다. Edit

WITH h_person AS
(
SELECT 1 pr_gubun, '0001' pr_sno, '홍길동' pr_name, '20110101' pr_enterdate, ' ' pr_outdate, '서울시 영등포구' pr_juso, '기혼' pr_marry, '19991231' pr_marrydate FROM dual
)
, h_pr_family AS
(
SELECT 1 pf_gubun, '0001' pf_sno, '123456-7899999' pf_no, '홍길순' pf_name, '딸' pf_relation FROM dual
UNION ALL SELECT 1, '0001', '123456-7899998', '홍길자', '아들' FROM dual
UNION ALL SELECT 1, '0001', '123456-7899888', '홍말자', '아들' FROM dual
)
, h_pr_insa AS
(
SELECT 1 pi_gubun, '0001' pi_sno, '20110420' pi_date, 'A20' pi_bjikchak FROM dual
UNION ALL SELECT 1, '0001', '20110620', 'A30' FROM dual
)
, h_jikchak AS
(
SELECT 'A20' jk_code, '주임' jk_name FROM dual
UNION ALL SELECT 'A30', '대리' FROM dual
)
SELECT pr_sno
     , rn
     , DECODE(rn, 1, MIN(pr_name     )) pr_name    
     , DECODE(rn, 1, MIN(pr_enterdate)) pr_enterdate
     , DECODE(rn, 1, MIN(pr_juso     )) pr_juso    
     , DECODE(rn, 1, MIN(pr_marry    )) pr_marry   
     , DECODE(rn, 1, MIN(pr_marrydate)) pr_marrydate
     , MIN(pf_no       ) pf_no      
     , MIN(pf_name     ) pf_name    
     , MIN(pf_relation ) pf_relation
     , MIN(pi_date     ) pi_date    
     , MIN(pi_bjikchak ) pi_bjikchak
     , MIN(jk_name     ) jk_name    
  FROM (
        SELECT pr_sno
             , ROW_NUMBER() OVER(PARTITION BY pr_sno ORDER BY pf_no) rn
             , pr_name
             , pr_enterdate
             , pr_juso
             , pr_marry
             , pr_marrydate
             , pf_no
             , pf_name
             , pf_relation
             , '' pi_date
             , '' pi_bjikchak
             , '' jk_name
          FROM h_person pr
             , h_pr_family pf
         WHERE pr_outdate = ' '
           AND pr_gubun = pf_gubun(+)
           AND pr_sno   = pf_sno(+)
         UNION ALL
        SELECT pr_sno
             , ROW_NUMBER() OVER(PARTITION BY pr_sno ORDER BY MIN(pi_date)) rn
             , '' pr_name
             , '' pr_enterdate
             , '' pr_juso
             , '' pr_marry
             , '' pr_marrydate
             , '' pf_no
             , '' pf_name
             , '' pf_relation
             , MIN(pi_date) pi_date
             , pi_bjikchak
             , jk_name
          FROM h_person pr
             , h_pr_insa pi
             , h_jikchak jk
         WHERE pr_outdate  = ' '
           AND pr_gubun    = pi_gubun
           AND pr_sno      = pi_sno
           AND pi_bjikchak = jk_code
         GROUP BY pr_gubun, pr_sno, pi_bjikchak, jk_name
        )
 GROUP BY pr_sno, rn
 ORDER BY pr_sno, rn
;

마농(manon94)님이 2011-09-30 11:30에 작성한 댓글입니다.
이 댓글은 2011-09-30 11:33에 마지막으로 수정되었습니다.

 

감사합니다.

주말동안 해당 쿼리문에 대해 공부좀 해야 겠습니다.

제가 생각하지 못했던 부분이 너무 많네요.

다시 한번 감사드립니다.

김종열(bongji123)님이 2011-09-30 11:58에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38931쿼리문의 [2]
mangchi
2011-10-04
3513
38930캐릭터셋 관련 일본어 저장 질문이요 도와주세요.
이종성
2011-09-30
3896
38929tansname.ora 궁금한점 입니다. [2]
장영권
2011-09-30
3789
38927아래질문의 추가 정보 입니다. [3]
김종열
2011-09-30
5078
38926쿼리 관련 질문 드립니다. [3]
김종열
2011-09-29
4544
38925IIS관리자에서 응용프로그램 풀 기본값 설정에서 32bit사용을 했을때 DB연결 방법 문의 [1]
김수진
2011-09-29
5360
38923【DB설계】컬럼수가 130개정도 데이타 1만5000건 검색 [4]
열심히
2011-09-29
5612
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다