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 40103 게시물 읽기
No. 40103
같은구조의 테이블 조인 후 순번 설정하기
작성자
사용자
작성일
2013-04-18 16:16ⓒ
2013-04-19 09:52ⓜ
조회수
6,874

안녕하세요...

염치없지만..도움 주시면 감사하겟습니다..

아래와 같은 테이블 2개가 있습니다.

구조는 동일하고...들어가 있는 data는 필드명 a 와 a_1 로 조인 가능 합니다.

그랬을 때...제일 아래와 같은 결과물이 나올 수 잇을까요???

테이블 하나 일때는

 


SELECT a
       ,b
     , ROW_NUMBER() OVER(PARTITION BY a ORDER BY f ) rn1
     , g
     ,h     , i
 FROM 테이블명 

위와 같은 식으로 보여 줄 수 있었는데...

두개 테이블을 한꺼번에 보여 줘야 해서..

질문 드립니다.

고수님들 알려 주세요...

a b c d e f g h i
기업1 20111231 1406 02 aaa 0000005034 09 4392743 0.05
기업2 20111231 1000 02 bbb 0001028733 09 7682395 0.03
기업2 20111231 1000 02 bbb 0001028733 09 7682395 0.03
기업3 20111231 6590 02 ddd 0000157109 09 9600000 0.02
기업3 20111231 6590 02 efg 0000157109 09 9600000 0.02
기업3 20111231 6590 02 hij 0000157109 09 9600000 0.02
기업3 20111231 6590 02 xxx 0000157109 09 9600000 0.02
                 
                 
a_1 b_1 c_1 d_1 e_1 f_1 g_1 h_1 i_1
기업1 20111231 1406 02 aaa 0000005034 09 4392743 0.05
기업1 20111231 1406 02 bbb 0001028733 09 7682395 0.03
기업2 20111231 1000 02 bbb 0001028733 09 7682395 0.03
기업3 20111231 6590 02 efg 0000157109 09 9600000 0.02
기업3 20111231 6590 02 hij 0000157109 09 9600000 0.02
기업3 20111231 6590 02 xxx 0000157109 09 9600000 0.02
                 
                 
결과 테이블A       테이블2      
  순번       순번       
기업1 1 1406 02 aaa 1 1406 02 aaa
          2 1406 02 bbb
기업2 1 1000 02 bbb 1 1000 02 bbb
기업2 2 1000 02 bbb        
기업3 1 6590 02 ddd 1 6590 02 efg
기업3 2 6590 02 efg 2 6590 02 hij
기업3 3 6590 02 hij 3 6590 02 xxx
기업3 4 6590 02 xxx        

 

 

 

----------------------------------------------------------------------------

마농님..아래와 같은 결과 입니다.

원하는 결과는 붉은 색으로 표시된 부분이 안 나오게 하는 것입니다.

원하는 결과              
table A (기준테이블)   table B       
기업A 1 data 1 xxxx 기업A 1 data 1  
기업A 2 data 2 xxxx        
기업A 3 data 3 xxxx        
기업A 4 data 4 xxxx        
기업A 5 data 5 xxxx        
기업A 6 data 6 xxxx        
기업A 7 data 7 xxxx        
기업B 1 data 1 xxxx 기업B 1 data 1 yyy
기업B 2 data 2 xxxx 기업B 2 data 2 yyy
기업C 1 data 1 xxxx 기업C 1 data 1 yyy
기업C 2 data 2 xxxx 기업C 2 data 2 yyy
기업C 3 data 3 xxxx 기업C 3 data 3 yyy
        기업C 4 data 4 yyy
        기업C 5 data 5 yyy
기업D 1 data 1 xxxx 기업D 1 data 1 yyy
기업D 2 data 2 xxxx 기업D 2 data 2 yyy
기업D 3 data 3 xxxx 기업D 3 data 3 yyy
기업D 4 data 4 xxxx        
기업D 5 data 5 xxxx        
기업D 6 data 6 xxxx        
기업D 7 data 7 xxxx        
               
               
위 sql 의 결과            
기업A 1 data 1 xxx 기업A 1 data 1 xxx
기업A 2 data 2 xxx        
기업A 3 data 3 xxx        
기업A 4 data 4 xxx        
기업A 5 data 5 xxx        
기업A 6 data 6 xxx        
기업A 7 data 7 xxx        
        기업XX 1 data1 11111111111
기업B 1 data 1 xxx 기업B 1 data 1 yyy
기업B 2 data 2 xxx 기업B 2 data 2 yyy
        기업 ZZ 1 data1 11111111111
        기업 ZZ 2 data2 11111111111
        기업 ZZ 3 data3 11111111111
        기업 ZZ 4 data4 11111111111
        기업 YY 1 data5 11111111111
기업C 1 data 1 xxx 기업C 1 data 1 yyy
기업C 2 data 2 xxx 기업C 2 data 2 yyy
기업C 3 data 3 xxx 기업C 3 data 3 yyy
        기업C 4 data 4 yyy
        기업C 5 data 5 yyy
기업D 1 data 1 xxx 기업D 1 data 1 yyy
기업D 2 data 2 xxx 기업D 2 data 2 yyy
기업D 3 data 3 xxx 기업D 3 data 3 yyy
기업D 4 data 4 xxx        
기업D 5 data 5 xxx        
기업D 6 data 6 xxx        
기업D 7 data 7 xxx        

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

SELECT *
  FROM (SELECT a
             , ROW_NUMBER() OVER(PARTITION BY a ORDER BY f) rn1
             , b, c, d, e, f, g, h, i
         FROM 테이블1
        ) a
  FULL OUTER JOIN
       (SELECT a_1
             , ROW_NUMBER() OVER(PARTITION BY a_1 ORDER BY f_1) rn2
             , b_1, c_1, d_1, e_1, f_1, g_1, h_1, i_1
         FROM 테이블2
        ) b
    ON a.a = b.a_1
   AND a.rn1 = b.rn2
 ORDER BY NVL(a.a, b.a_1), NVL(a.rn1, b.rn2)
;

마농(manon94)님이 2013-04-18 17:52에 작성한 댓글입니다.

마농님..

몇일 고생 했는데...

너무 감사합니다. 많은 도움이 되었습니다.

앞으로도 많은 가르침 부탁 드립니다...^^...

사용자님이 2013-04-18 19:05에 작성한 댓글입니다. Edit

마농님...

하나만 더 여쭤 보겠습니다.

위와 같은 sql의 경우 서로 중복되지 않은 (교집합이 아닌) data도 같이 돌출 되는데...

순수하게 교집합인 경우만 출력 되게 하고 싶은 경우는 어찌 해야 할까요??

염치없지만 하나 더 여쭤 봅니다..

감사합니다.

사용자님이 2013-04-18 19:53에 작성한 댓글입니다. Edit
교집합은 JOIN 과 테이블간 KEY 값만 연결해주시면 됩니다.      
 

WITH t1(key1, key2, col1) AS(
SELECT 1, 1, 'c1' FROM dual UNION ALL 
SELECT 1, 2, 'c2' FROM dual UNION ALL
SELECT 2, 1, 'c3' FROM dual UNION ALL
SELECT 3, 1, 'c4' FROM dual UNION ALL
SELECT 3, 2, 'c5' FROM dual
), t2(key1, key2, col1) AS(
SELECT 1, 1, 'c1' FROM dual UNION ALL 
SELECT 2, 1, 'c3' FROM dual UNION ALL
SELECT 2, 2, 'c3' FROM dual UNION ALL
SELECT 3, 1, 'c4' FROM dual UNION ALL
SELECT 3, 2, 'c5' FROM dual
)
-- 교집합 
SELECT *
  FROM t1
  JOIN t2
    ON t1.key1 = t2.key1
   AND t1.key2 = t2.key2
 ORDER BY t1.key1, t1.key2  

-- 합집합 
SELECT *
  FROM t1
  FULL OUTER JOIN 
       t2
    ON t1.key1 = t2.key1
   AND t1.key2 = t2.key2
 ORDER BY NVL(t1.key1, t2.key1), NVL(t1.key2, t2.key2)
아린(arin76)님이 2013-04-18 20:51에 작성한 댓글입니다.

추가 질문에 대한 설명이 필요합니다.

원본대비 결과표로 보여주시는게 가장 좋구요.

마농(manon94)님이 2013-04-19 08:47에 작성한 댓글입니다.

마농님..윗글 부분에 수정 했습니다.

확인 한번 부탁 드립니다.

사용자님이 2013-04-19 11:07에 작성한 댓글입니다. Edit

SELECT a, rn1
     , b, c, d, e, f, g, h, i
     , a_1, rn2
     , b_1, c_1, d_1, e_1, f_1, g_1, h_1, i_1
  FROM (SELECT a, rn1
             , b, c, d, e, f, g, h, i
             , a_1, rn2
             , b_1, c_1, d_1, e_1, f_1, g_1, h_1, i_1
             , MIN(a.rn1) OVER(PARTITION BY NVL(a.a, b.a_1)) x
             , MIN(b.rn2) OVER(PARTITION BY NVL(a.a, b.a_1)) y
          FROM (SELECT a
                     , ROW_NUMBER() OVER(PARTITION BY a ORDER BY f) rn1
                     , b, c, d, e, f, g, h, i
                 FROM 테이블1
                ) a
          FULL OUTER JOIN
               (SELECT a_1
                     , ROW_NUMBER() OVER(PARTITION BY a_1 ORDER BY f_1) rn2
                     , b_1, c_1, d_1, e_1, f_1, g_1, h_1, i_1
                 FROM 테이블2
                ) b
            ON a.a = b.a_1
           AND a.rn1 = b.rn2
        )
 WHERE x = 1
   AND y = 1
 ORDER BY NVL(a, a_1), NVL(rn1, rn2)
;

마농(manon94)님이 2013-04-19 11:19에 작성한 댓글입니다.

감사합니다.

원하는 결과가 나왔습니다..

감사드립니다.^^;...

사용자님이 2013-04-19 13:37에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40107고수님들 알려주세요 [1]
초보자
2013-04-24
5654
40106오라클 백업시(export) [1]
김태혁
2013-04-23
6403
40105audit table 의 owner 변경시 어떡해 해야 하나요?
유민상
2013-04-19
5294
40103같은구조의 테이블 조인 후 순번 설정하기 [8]
사용자
2013-04-18
6874
40102인덱스 삭제 문의입니다.
이카루
2013-04-17
5631
40100가로세로를 한번에 표현하는 쿼리? [1]
박주영
2013-04-16
6425
40099두날짜 사이의 개월수 구하기 [1]
신동화
2013-04-16
6401
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다