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 40670 게시물 읽기
No. 40670
데이터 병합 방법좀 알려주세요
작성자
태영(audi1823)
작성일
2015-01-09 11:02
조회수
7,068

KEY              X1                   X2                    Y1                  Y2

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

KOR             100                   N                 

KOR                                                             200                    Y

KOR             200                   Y

KOR             100                  N                 

KOR                                                               300                 N

 

위와 같은 데이터를 가지고 아래와 같이 병합하려고 하는데...

혼자서 원하는 결과를 만들기가 힘들어 고수님들의 도움 청합니다.

 

KEY               X1                  X2                     Y1                  Y2

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

KOR            100                  N                     200                    Y

KOR             200                 Y                      300                   N

KOR             100                 N

 

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

병합 조건은요?

KEY는 하나인데..

어떤 조건으로?? 무슨 기준으로??

 

테이블은 한개인지?

TREE 구조인건가요?

BOM 형태인가요????

 

 

최한영(terry0515)님이 2015-01-09 11:29에 작성한 댓글입니다.

KEY, X1, X2 컬럼을 가진 테이블과  KEY, Y1, Y2를 컬럼을 가진 테이블을 UNION 해서 결과를 보여주는데

Y1, Y2컬럼이 비었을경우 다음 데이터를 보여줘야합니다.

 

태영(audi1823)님이 2015-01-09 11:42에 작성한 댓글입니다.
이 댓글은 2015-01-09 11:42에 마지막으로 수정되었습니다.

MSSQL 2008 기준으로 작성되었습니다.

오라클은 사용해본적이 없어서요.

 

with TBL As
(
select 'KOR' As KEY1,100  As X1,'N'  AS X2,NULL AS Y1,NULL AS Y2 union all
select 'KOR' As KEY1,NULL As X1,NULL AS X2,200  AS Y1,'Y'  AS Y2 union all
select 'KOR' As KEY1,200  As X1,'Y'  AS X2,NULL AS Y1,NULL AS Y2 union all
select 'KOR' As KEY1,100  As X1,'N'  AS X2,NULL AS Y1,NULL AS Y2 union all
select 'KOR' As KEY1,NULL As X1,NULL AS X2,300  AS Y1,'N'  AS Y2
)
,TBL2 As
(
  Select KEY1  As KEY1
        ,X1   AS X1
        ,X2   AS X2
        ,Y1   AS Y1
        ,Y2   As Y2
        ,ROW_NUMBER() OVER ( Order By KEY1 ) As seq
    From TBL
)       
SELECT
       TBL2.KEY1
      ,TBL2.X1
      ,TBL2.X2
      ,TBL2_Y.Y1
      ,TBL2_Y.Y2     
  From TBL2
            Left Outer Join
                            TBL2 As TBL2_Y
                                           On TBL2.seq + 1 = TBL2_Y.seq
 Where IsNull(TBL2.X1,-1) <> -1
 

 

--추가 : 그리구 위에 말씀하신 조건대로라면

본문의 데이터가 아닌

KOR 100 N 200 Y
KOR 200 Y NULL NULL
KOR 100 N 300 N

상기의 형태로 나와야겠죠..

최한영(terry0515)님이 2015-01-09 12:03에 작성한 댓글입니다.

Y1, Y2 가 NULL 인 경우

무조건 해당 ROW 초과 ROW 중

Y1,Y2 에 값이 있는 건을 가져와서 보여줘야되는지요?

최한영(terry0515)님이 2015-01-09 12:07에 작성한 댓글입니다.

KEY, X1, X2 컬럼을 가진 테이블과  KEY, Y1, Y2를 컬럼을 가진 테이블을 UNION 해서 결과를 보여주는데
라고 말씀하셨는데...
두 테이블 단순 유니온 해서 위의 원본처럼 나오기가 힘들걸요?
위 원본집합으로 보여준 부분이 실제 원본은 아니고 중간집합인듯 한데요..
뭔가 중요한 정보가 빠져 있습니다.
두 테이블간의 관계가 key 만으로 이루어 지는 것이 맞는지?
다른 정보는 없는지?
위의 중간 집합은 혹시 질문할때 잘못 만들어 진것은 아닌지?
질문하실 때 중간집합으로 질문하는것 보다는 원본집합을 그대로 제시하여 질문하는게 오히려 좋습니다.

마농(manon94)님이 2015-01-09 13:59에 작성한 댓글입니다.

WITH t1 AS
(
SELECT 'KOR' key, 100 x1, 'N' x2 FROM dual
UNION ALL SELECT 'KOR', 200, 'Y' FROM dual
UNION ALL SELECT 'KOR', 100, 'N' FROM dual
)
, t2 AS
(
SELECT 'KOR' key, 200 y1, 'Y' y2 FROM dual
UNION ALL SELECT 'KOR', 300, 'N' FROM dual
)
SELECT key
     , MIN(x1) x1
     , MIN(x2) x2
     , MIN(y1) y1
     , MIN(y2) y2
  FROM (SELECT key
             , ROW_NUMBER() OVER(PARTITION BY key ORDER BY ROWNUM) rn
             , x1, x2
             , null y1, null y2
          FROM t1
         UNION ALL
        SELECT key
             , ROW_NUMBER() OVER(PARTITION BY key ORDER BY ROWNUM) rn
             , null x1, null x2
             , y1, y2
          FROM t2
        )
 GROUP BY key, rn
 ORDER BY key, rn
;

마농(manon94)님이 2015-01-09 15:15에 작성한 댓글입니다.
이 댓글은 2015-01-09 15:15에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
40674오라클 imp 에러
천랑성
2015-01-13
7485
40673INDEX_DESC 와 MAX함수 속도차이 [2]
return 땅콩
2015-01-12
7730
40671procedure 오류입니다 도움이나 조언 부탁드립니다. [2]
이주호
2015-01-09
7008
40670데이터 병합 방법좀 알려주세요 [6]
태영
2015-01-09
7068
40669db 일요일부터 월요일까지 시간 어떻게 추리나요? [2]
조성찬
2015-01-08
7076
40667비어있는 시간과 실제시간 합치기 문의 드립니다. [2]
김태경
2015-01-06
7562
40666DB LINK 재연결 방법에 대한 질문입니다. [1]
할마시
2015-01-04
7725
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다