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 6436 게시물 읽기
No. 6436
쿼리 도움 좀 주세요;;
작성자
초보자
작성일
2012-11-06 10:29
조회수
7,075

  A테이블

c1     c2    c3
10   100  한국
20   200  미국
20   200  호주
 
B테이블
c1     c2    c3
10   100  중국
10   100  태국
20   200  일본
 
----원하는 결과----
c1     c2    c3    c3
10   100  한국  중국
10   100            태국
20   200  미국  일본
20   200  호주
 
입니다....
풀아우터, 레프트/라이트 아웃 조인해봐도 잘 안되는것 같습니다.
도움 부탁드려요 ;;
이 글에 대한 댓글이 총 2건 있습니다.

 WITH ta ( c1  ,   c2  ,  c3 )

AS
(
SELECT 10 ,  100 , N'한국' UNION ALL
SELECT 20 ,  200 , N'미국' UNION ALL
SELECT 20 ,  200 , N'호주'
)
, tb ( c1  ,   c2  ,  c3 )
AS
(
SELECT 10 ,  100 , N'중국' UNION ALL
SELECT 10 ,  100 , N'태국' UNION ALL
SELECT 20 ,  200 , N'일본'
)
, jt ( rn, c1, c2, c3a, c3b )
AS
(
SELECT ROW_NUMBER() OVER ( ORDER BY ta.c1, ta.c2, ta.c3, tb.c3 ) AS rn, 
ta.c1, ta.c2, ta.c3, tb.c3 
FROM ta 
INNER JOIN tb 
ON ta.c1 = tb.c1 AND ta.c2 = tb.c2
)
SELECT COALESCE( tta.c1, ttb.c1 ) AS c1 , COALESCE( tta.c2, ttb.c2 ) AS c2, ISNULL( c3a, '' ) AS c3, ISNULL( c3b, '' ) AS c3
FROM ( 
SELECT rn AS num 
FROM jt 
) AS nums
LEFT OUTER JOIN (
SELECT MIN(rn) AS minrna, c1, c2, c3a
FROM jt
GROUP BY c1, c2, c3a
) AS tta ON nums.num = minrna
LEFT OUTER JOIN (
SELECT MIN(rn) AS minrnb, c1, c2, c3b
FROM jt
GROUP BY c1, c2, c3b
) AS ttb ON nums.num = minrnb
ORDER BY nums.num ASC
;
 
우욱님이 2012-11-06 14:05에 작성한 댓글입니다.
이 댓글은 2012-11-06 14:21에 마지막으로 수정되었습니다. Edit

죄송합니다. 

mssql이군요, seq는 단순히 증분 값이므로, 다른 rank값을 사용하시면, 동일한 결과를 얻을수 있을것 같습니다.

 --변수 초기화.

 set @seq=0;

select t1.c1, t1.c2, if(@ac=ac,'',if(@ac:=ac,t1.c3,null)) c3, if(@bc=bc,'',if(@bc:=bc,t2.c3,null)) c3  -- 각 row 이미 사용 되었는지 안되었는지를 확인해서, 값을 출력할지 말지를 결정  합니다.

from  

-- 각 row가 유일하게 구별 될수 있는 필드가 필요 합니다. 현재 데이타로선 특별히 outer 가 필요 없는것 같아 사용하지 않았습니다.

(select @seq:=(@seq+1) ac, c1, c2,c3 from a ) t1,

(select @seq:=(@seq+1) bc, c1, c2,c3 from b ) t2

where t1.c1=t2.c1 and t1.c2=t2.c2;

결과는 아래와 같습니다.

 

+------+------+------+------+
| c1   | c2   | c3   | c3   |
+------+------+------+------+
|   10 |  100 | kor  | chn  |
|   10 |  100 |      | tha  |
|   20 |  200 | usa  | jpn  |
|   20 |  200 | aust |      |
+------+------+------+------+
4 rows in set (0.00 sec)
 
lnx4u님이 2012-11-07 23:09에 작성한 댓글입니다.
이 댓글은 2012-11-07 23:11에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6439not in 과 not exists 질문입니다. [2]
재훈
2012-11-08
7449
6438DB반복문이 궁금합니다. [1]
정철민
2012-11-07
7583
6437오라클 프로시저의 RETURN값을 받는방법 [1]
김봉달
2012-11-06
7858
6436쿼리 도움 좀 주세요;; [2]
초보자
2012-11-06
7075
6435sql2005 update 사용중 이상한점 문의 드립니다. [1]
궁금
2012-11-01
7236
6434login , logout trigger [2]
노진광
2012-11-01
6855
6433mssql 의 동적 쿼리 검색인데 도와 주세요~ [1]
김기철
2012-10-31
8416
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다