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 40414 게시물 읽기
No. 40414
데이터 통합 쿼리질문
작성자
량디(fidele)
작성일
2014-03-25 17:09
조회수
7,088

안녕하세요.... 또 제 능력으로는 해결이 안되는 문제가 생겨
고수님들께 질문 드립니다.

WITH TESTA AS
(
    SELECT 'AAAAA' 제품, 'A' 세부항목, 3 수량 FROM DUAL
    UNION ALL SELECT 'AAAAA' 제품, 'B' 세부항목, 2 수량 FROM DUAL
    UNION ALL SELECT 'AAAAA' 제품, 'C' 세부항목, 2 수량 FROM DUAL
) SELECT * FROM TESTA


WITH TESTB AS
(
    SELECT 'AAAAA' 제품, 'D' 세부항목, 1 수량 FROM DUAL
    UNION ALL SELECT 'AAAAA' 제품, 'E' 세부항목, 2 수량 FROM DUAL
    UNION ALL SELECT 'AAAAA' 제품, 'A' 세부항목, 4 수량 FROM DUAL
) SELECT * FROM TESTB


위 두개 테이블은 재고 이동 테이블입니다..
TESTA는 보내는 테이블, TESTB는 받는 테이블이며,
1:N이 될 수도 있고   N:1이 될수도 있는 상황입니다

문제는 어떤제품 어떤 세부항목에서 보내서 TESTB의 어떤 세부항목으로 이동 되었는지
내역이 없습니다. 단지 이동의 총 합계수량만 같은 상황이네요...

이 데이터를 아래와 같은 데이터로 만드는 쿼리를 작성해야 하는데 쉽지가 않네요....


1번 ROW    AAAAA   A     1       AAAAA   D   1
2번 ROW    AAAAA   A     2       AAAAA   E   2
3번 ROW    AAAAA   B     2       AAAAA   A   2
4번 ROW    AAAAA   C     2       AAAAA   A   2

합계는 동일하고 이동 수량에 따라 데이터가 분리가 되야 하는 상황이네요
고수님들의 담 기다려 보겠습니다. 감사합니다.

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

질문의 예시자료가 석연치 않습니다.
1. 세부항목은 조인키가 아니네요?
   중요한 항목은 아닌 단순 보여주기용 항목인듯 하네요.
2. 정렬키가 있어야만 합니다.
   "일시" 라던가? "순번" 항목이 있어야 합니다.

마농(manon94)님이 2014-03-26 00:28에 작성한 댓글입니다.

WITH testa AS
(
SELECT 'AAAAA' 제품, 1 순번, 'A' 세부항목, 3 수량 FROM dual
UNION ALL SELECT 'AAAAA', 2, 'B', 2 FROM dual
UNION ALL SELECT 'AAAAA', 3, 'C', 2 FROM dual
)
, testb AS
(
SELECT 'AAAAA' 제품, 1 순번, 'D' 세부항목, 1 수량 FROM dual
UNION ALL SELECT 'AAAAA', 2, 'E', 2 FROM dual
UNION ALL SELECT 'AAAAA', 3, 'A', 4 FROM dual
)
SELECT a.제품
     , a.순번     AS 보내는순번
     , a.세부항목 AS 보내는세부항목
     , a.수량     AS 보내는수량
     , LEAST( a.수량
            , b.수량
            , a.누적수량 - b.누적수량 + b.수량
            , b.누적수량 - a.누적수량 + a.수량
            )     AS 매칭수량
     , b.수량     AS 받는수량
     , b.순번     AS 받는순번
     , b.세부항목 AS 받는세부항목
  FROM (SELECT 제품, 순번, 세부항목, 수량
             , SUM(수량) OVER(PARTITION BY 제품 ORDER BY 순번) 누적수량
          FROM testa
        ) a
     , (SELECT 제품, 순번, 세부항목, 수량
             , SUM(수량) OVER(PARTITION BY 제품 ORDER BY 순번) 누적수량
          FROM testb
        ) b
 WHERE a.제품 = b.제품
   AND a.누적수량 > b.누적수량 - b.수량
   AND b.누적수량 > a.누적수량 - a.수량
 ORDER BY a.제품, a.순번, b.순번
;

마농(manon94)님이 2014-03-26 08:31에 작성한 댓글입니다.
이 댓글은 2014-03-26 08:32에 마지막으로 수정되었습니다.

예시자료가 불충분해 죄송합니다.

세부항목은 조인키가 아니며 동일 제품에 세부 항목끼리 재고를 이동한 자료입니다.

물론 처리단위 동일한 일자와 전표번호가 존재합니다...

 

전표                  일자               제품              세부항목            수량 

1942279    20140326       AAAAAA                  B                    -10

1942279    20140326       AAAAAA                  C                    -2

1942279    20140326       AAAAAA                  A                     11

1942279    20140326       AAAAAA                  D                    1

 

이런 자료로 보시면 될것 같네요...

위 두라인은 -되면서    아래 두 라인으로 + 되는 형태의 자료입니다.

위 자료를      아래와 같은 자료로 만들려고 합니다.

AAAAA      B           -10            A         10

AAAAA      C           -1              A          1

AAAAA      C           -1              D         1

마농님 답변 감사합니다... 알려주신 방법으로 다시 연구해 보도록 하겠습니다.~

 

량디(fidele)님이 2014-03-26 09:55에 작성한 댓글입니다.

추가 예시 자료에도 정렬키가 안보이네요?

주는 쪽에서도 B를 먼저 주는지, C를 먼저 주는지?

받는 쪽에서도 A를 먼저 받는지, D를 먼저 받는지?

에 따라서 결과데이터가 달라집니다.

이런 순차적인 흐름에 따른 문제에서는 정렬키가 중요합니다.

마농(manon94)님이 2014-03-26 10:30에 작성한 댓글입니다.

아... 이 데이타에는 정렬 키라는게 없습니다.

B를 먼저주던 C를 먼저주던  같은 제품 내에서 수량만 맞으면 되는 자료입니다.

마농님 덕분에 좋은 쿼리 하나 배워갑니다. 감사합니다. 덕분에 해결은 잘 했습니다.

 

 

량디(fidele)님이 2014-03-29 15:08에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40418XMLAGG 사용시 &로 바뀌는 현상 [5]
XML
2014-04-01
11234
40417rollup을 통한 소계, 총계 가져오기 [1]
자바천재
2014-03-28
7907
40415대용량 데이터 처리질문
김한결
2014-03-26
6632
40414데이터 통합 쿼리질문 [5]
량디
2014-03-25
7088
40413centos 6.5 64bit 오라클9i 는 어디가면 다운받을수 있나요? [1]
염정훈
2014-03-25
6357
40412814만건 데이터 select [1]
파랑새
2014-03-25
6412
40411윈도우xp에서 사용할 oracle 9.2 구합니다.
한상원
2014-03-21
6062
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다