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
운영게시판
최근게시물
MS-SQL Q&A 6950 게시물 읽기
No. 6950
다시 쿼리 확인 부탁드립니다.
작성자
궁금해요(seunggo)
작성일
2016-01-18 18:53
조회수
4,393

table A

 

ID 이름

 

A1 홍길동

 

B1 박지성

 

C1 김연아

 

 

 

table B

 

ID 학력

 

A1 박사

 

A1 석사

 

A1 학사

 

B1 석사

 

B1 학사

 

C1 학사

 

 

 

table C

 

ID 경력

 

A1 삼성생명

 

A1 LG전자

 

B1 농심

 

B1 오뚜기

 

B1 해태

 

C1 도시공사

 

C1 농촌공사

 

 

위 3개 테이블을 이용해서 아래 와 같이 출력할려고 합니다.

 

 

 

ID 학력 경력

 

A1 박사 삼성생명

A1 석사 LG전자

A1 학사 null

B1 석사 농심

B1 학사 오뚜기

B1 null 해태

C1 학사 도시공사

C1 null 농촌공사

 

 

 

아래 질문에서 seq 를 뺀 건데요.

 

 

도움 부탁드립니다~

 

 

 

 

 

 

 

감사합니다.(__)

 

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

이걸 왜 하는건지 이해가 안되는데요?;

seq 가 빠짐으로 인해서

어떤 data랑 엮어야 할지도 모르고..

Join 할수있는 데이터는 단지 ID 뿐입니다.

이전 게시물에서는 ID와 SEQ 라는 2가지 자료가 있었기에

원하는 형태대로 뺄수 있었지만..

이 게시글은 원하는 형태대로 풀 방법이 없네요..

어떤 고수분도 풀지 못할듯요..

(단지 원하는 결과만을 뽑아내는 '하드코딩' 을 제외한)

최한영(terry0515)님이 2016-01-18 20:14에 작성한 댓글입니다.

이 게시글도 동일하게 A 테이블은 사용이 안되고

B,C 테이블만 사용이 되죠..

 

1)

B 테이블에 A1 이라는 ID 를 가진 데이터가 3개에요..

C 테이블에 A1 이라는 ID 를 가진 데이터가 2개구요..

ID만 가지고 엮었을때

3*2 = 6

A1 이라는 ID 에 대한값은 6개가 나오겠네요.

2)

B 테이블에 B1 이라는 ID 를 가진 데이터가 2개에요..

C 테이블에 B1 이라는 ID 를 가진 데이터가 3개구요..

ID만 가지고 엮었을때

2*3 = 6

B1 이라는 ID 에 대한값은 6개가 나오겠네요.

3)

B 테이블에 C1 이라는 ID 를 가진 데이터가 1개에요..

C 테이블에 C1 이라는 ID 를 가진 데이터가 2개구요..

ID만 가지고 엮었을때

1*2 = 2

C1 이라는 ID 에 대한값은 2개가 나오겠네요.

 

원하는 형태로 답을 내면 좋겠지만

답을 낼 수 없는 형태이니

왜 원하는 형태대로 답이 안나오는지는 아셔야할듯해서 댓글답니다.

최한영(terry0515)님이 2016-01-18 20:21에 작성한 댓글입니다.
이 댓글은 2016-01-18 20:21에 마지막으로 수정되었습니다.

최한영님 자세한 답변 감사합니다.

 

현재 테이블이 위와 같은 형태로 되어 있는데,

결과물을 달라고 해서, 혹시나 하는 마음에 한 번 더 질문했습니다~

 

다시 한 번 자세히 설명해 주셔서 감사합니다~(__)

궁금해요(seunggo)님이 2016-01-18 21:41에 작성한 댓글입니다.

정렬기준이 없네요.
정렬기준만 명확하게 지정해 준다면 가능합니다.
순번을 부여해 조인키로 이용하는 방법입니다.


WITH t_b(id, 졸업년월, 학력) AS
(
          SELECT 'A1', '201602', '박사'
UNION ALL SELECT 'A1', '201402', '석사'
UNION ALL SELECT 'A1', '201202', '학사'
UNION ALL SELECT 'B1', '201602', '석사'
UNION ALL SELECT 'B1', '201002', '학사'
UNION ALL SELECT 'C1', '201508', '학사'
)
, t_c(id, 경력시작일, 경력종료일, 경력) AS
(
          SELECT 'A1', '20140101', '20151231', '삼성생명'
UNION ALL SELECT 'A1', '20130101', '20131231', 'LG전자'
UNION ALL SELECT 'B1', '20150101', '20151231', '농심'
UNION ALL SELECT 'B1', '20140101', '20141231', '오뚜기'
UNION ALL SELECT 'B1', '20130101', '20131231', '해태'
UNION ALL SELECT 'C1', '20140101', '20141231', '도시공사'
UNION ALL SELECT 'C1', '20130101', '20131231', '농촌공사'
)
SELECT ISNULL(b.id, c.id) id
     , ISNULL(b.rn, c.rn) rn
     , b.학력
     , c.경력
  FROM (SELECT id, 학력
             , ROW_NUMBER() OVER(PARTITION BY id
                                     ORDER BY 졸업년월 DESC) rn
          FROM t_b
        ) b
  FULL OUTER JOIN
       (SELECT id, 경력
             , ROW_NUMBER() OVER(PARTITION BY id
                                     ORDER BY 경력시작일 DESC) rn
          FROM t_c
        ) c
    ON b.id = c.id
   AND b.rn = c.rn
;

마농(manon94)님이 2016-01-19 08:50에 작성한 댓글입니다.
이 댓글은 2016-01-19 08:51에 마지막으로 수정되었습니다.

마농님 감사합니다.

 

많이 배워갑니다~(__)

궁금해요(seunggo)님이 2016-01-19 12:18에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6953컬럼값 변경 문의 드립니다 [4]
축구소년
2016-02-01
4297
6952랜덤함수를 이용하여 특정일자를 지정하는 쿼리 문의 드립니다.
권영호
2016-01-28
4242
6951xp_cmdshell 막는 방법 [1]
궁금이
2016-01-21
4077
6950다시 쿼리 확인 부탁드립니다. [5]
궁금해요
2016-01-18
4393
6949혹시 쿼리알림을 사용해보신분이 계신지요?
조치만
2016-01-16
4430
6948쿼리 질문 있습니다. 확인 부탁드립니다. [3]
궁금해요
2016-01-15
4306
6946[질문] 주소 검색[시/군/구/동 추출 문의] [1]
궁금이
2016-01-14
4685
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.033초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다