left,right, full outer join 질문 0 6 1,614

by 스캇 [SQL Query] JOIN [2013.12.21 14:29:44]



1) 2)번을 조인해서 3번과 같이 나오고 싶은데 4번과 같이 조회 되나요? 어떻게 해야 하는지?

1)
  SELECT maqpono, maqposeq,maqhqty,maqbqty from   MA170MP
PO-131210-RM-01 1 9 1
PO-131210-RM-01 2 10 2
PO-131210-RM-01 3 18 0

2)
SELECt MARPONO ,MARPOSEQ ,marhtno, marhqty,   marbqty  from  MA180MP 

PO-131210-RM-01 1 AAA   9 1
PO-131210-RM-01 2 BBB   3 1
PO-131210-RM-01 2 CCC   7 1
PO-131210-RM-01 3 DDD   18 0

4)

   SELECT maqpono, maqposeq,maqhqty,maqbqty,marhtno,  marhqty,   marbqty from   MA170MP
left OUTER JOIN MA180MP ON MAQPONO=MARPONO AND MAQPOSEQ = MARPOSEQ
결과값

PO-131210-RM-01 1 9 1 AAA 9 1
PO-131210-RM-01 2 10 2 BBB 3 1
PO-131210-RM-01 2 10 2 CCC 7 1
PO-131210-RM-01 3 18 0 DDD 18 0

원하는 결과 값
3)

PO-131210-RM-01 1 9 1 AAA 9 1
PO-131210-RM-01 2 10 2 BBB 3 1
        CCC 7 1
PO-131210-RM-01 3 18 0 DDD 18 0
by 우리집아찌 [2013.12.23 08:27:06]
WITH MA170MP(maqpono, maqposeq,maqhqty,maqbqty ) AS (
SELECT 'PO-131210-RM-01' ,1 ,9 ,1 FROM DUAL UNION ALL
SELECT 'PO-131210-RM-01' ,2 ,10 ,2 FROM DUAL UNION ALL
SELECT 'PO-131210-RM-01' ,3 ,18 ,0 FROM DUAL 
), MA180MP (MARPONO ,MARPOSEQ ,marhtno, marhqty,  marbqty ) AS (
SELECT 'PO-131210-RM-01','1','AAA',9 ,1 FROM DUAL UNION ALL
SELECT 'PO-131210-RM-01','2','BBB',3 ,1 FROM DUAL UNION ALL
SELECT 'PO-131210-RM-01','2','CCC',7 ,1 FROM DUAL UNION ALL
SELECT 'PO-131210-RM-01','3','DDD',18, 0 FROM DUAL 
)

SELECT DECODE(RN,1,maqpono ) maqpono ,
    DECODE(RN,1,maqposeq ) maqposeq ,
    DECODE(RN,1,maqhqty ) maqhqty ,
    DECODE(RN,1,maqbqty ) maqbqty ,
    marhtno, marhqty,  marbqty
FROM
(SELECT maqpono, maqposeq,maqhqty,maqbqty,marhtno, marhqty,  marbqty ,
    ROW_NUMBER() OVER(PARTITION BY maqpono, maqposeq,maqhqty,maqbqty ORDER BY NULL) RN
 FROM MA170MP LEFT OUTER JOIN MA180MP ON MAQPONO=MARPONO AND MAQPOSEQ = MARPOSEQ
) 

by 스캇 [2013.12.23 10:18:30]
답변 감사 드립니다.  우리집 아찌님의 쿼리는 제가 부족해서 이해 되지 안되네요..
열심히 공부해서 이해하도록 하겠습니다
근데 제가 작성한 쿼리는 어디부분이 틀렸죠? 저는 맞는가 같은데 정확히 조회가 안되니..

by 스캇 [2013.12.23 10:22:21]

ROW_NUMBER() OVER(PARTITION BY 사용 안하고 하는 방법은 없을까요? 고수님들..

by 마농 [2013.12.23 11:26:07]
스캇님께서 작성하신 조인에는 아무런 문제가 없습니다.
다만 원하시는 부분은 조인으로 해결되지 않는 문제입니다.
조인과는 상관 없는 문제이며 별도의 기교(?)가 필요한 부분이죠.
원하시는 것은 반복되어 출력되는 부분을 1번만 출력되도록 하는 부분입니다.
1번만 이라는 단서조항을 구하는 것이 Row_number 구문이며
출력여부를 결정하는 부분이 Decode 구문이지요.

by 스캇 [2013.12.23 11:32:20]

네 답변 갑사 드립니다 마농님
http://www.gurubee.net/lecture/1021 에서 참고 했는데 제가 잘못 이해했네요
DISTINCT 부분  있었네요.
감사 드립니다.


by 마농 [2013.12.23 11:36:00]
이 문제는 Distinct 와는 다른 문제죠.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입