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 7153 게시물 읽기
No. 7153
선입선출 구현
작성자
tiger
작성일
2018-11-21 08:04
조회수
3,021

 안녕하세요... 

선입선출구현때문에 머리가 아파요...  

 

제품재고 

제품코드 롯트번호      제조일자      재고수량

0001        0000-00-00  2018-10-01    50

0001        0000-00-01  2018-10-15    100

0001       0000-00-02  2018-10-20   30 

 

출고

출고일자     순번 제품코드 수량 단가 금액

2018-11-01    1    00001     30  500 15000

2018-11-01    2    00001     10  480   4800

2018-11-02    1    00001     50  500   25000

2018-11-03   1     00001     80   480   38400

 

제조일자순으로 선입선출후 출고번호에 롯트번호 매칭해야합니다.

생성테이블

출고일자      순번 제품코드 롯트번호 수량 

2018-11-01    1   0001   0000-00-00  30  

2018-11-01    2   0001   0000-00-00  10

2018-11-02    1   0001  0000-00-00  10

2018-11-02    1    0001  0000-00-01 40

2018-11-03    1    0001  0000-00-01 60

2018-11-03    1   0001  0000-00-02 20

 

이런식으로 매칭해서 매칭해서 새로운 테이블을 생성하고 싶은데요..

어떻게 하면될까요? ㅠㅠ  도움좀 주세요~

 

 

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

http://database.sarang.net/?inc=read&aid=41194&criteria=oracle&subcrit=qna&id=&limit=20&keyword=&page=1

참고하세요.

박인호(paerae)님이 2018-11-21 10:09에 작성한 댓글입니다.

WITH t1 AS
(
SELECT '0001' cd, '0000-00-00' lot, '2018-10-01' dt,  50 cnt
UNION ALL SELECT '0001', '0000-00-01', '2018-10-15', 100
UNION ALL SELECT '0001', '0000-00-02', '2018-10-20',  30
)
, t2 AS
(
SELECT '2018-11-01' dt, 1 seq, '0001' cd, 30 cnt, 500 price, 15000 amt
UNION ALL SELECT '2018-11-01', 2, '0001', 10, 480,  4800
UNION ALL SELECT '2018-11-02', 1, '0001', 50, 500, 25000
UNION ALL SELECT '2018-11-03', 1, '0001', 80, 480, 38400
)
SELECT b.dt out_dt
     , b.seq
     , b.cd
     , a.lot
     , a.dt in_dt
--     오라클의 LEAST 함수가 없어서 CASE 문이 복잡하네요.
--   , LEAST(a.cnt, b.cnt, a.e - b.s, b.e - a.s) qty  -- Oracle
     , CASE WHEN a.s >= b.s AND a.e <= b.e THEN a.cnt
            WHEN a.s <= b.s AND a.e >= b.e THEN b.cnt
            WHEN a.s <= b.s AND a.e <= b.e THEN a.e - b.s
            WHEN a.s >= b.s AND a.e >= b.e THEN b.e - a.s
        END qty
  FROM (SELECT cd, lot, dt, cnt
             , SUM(cnt) OVER(PARTITION BY cd ORDER BY dt) - cnt s
             , SUM(cnt) OVER(PARTITION BY cd ORDER BY dt)       e
          FROM t1
        ) a
 INNER JOIN
       (SELECT dt, seq, cd, cnt, price, amt
             , SUM(cnt) OVER(PARTITION BY cd ORDER BY dt, seq) - cnt s
             , SUM(cnt) OVER(PARTITION BY cd ORDER BY dt, seq)       e
          FROM t2
        ) b
    ON a.cd = b.cd
   AND a.s  < b.e
   AND b.s  < a.e
 ORDER BY b.cd, b.dt, b.seq, a.dt
;

http://www.gurubee.net/lecture/2837

마농(manon94)님이 2018-11-21 10:37에 작성한 댓글입니다.
이 댓글은 2018-11-21 10:40에 마지막으로 수정되었습니다.

 답변 너무 감사합니다 ^^

tiger님이 2018-11-21 12:44에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7156테이블 반환 함수 동적쿼리 방법 문의 드립니다.
임민규
2019-01-10
2038
7155PK INDEX 관련 질문 드립니다. [2]
거북이
2019-01-09
1995
7154새해 복 많이 받으세요~ 쿼리 질문 하나 드립니다~ [4]
이성원
2019-01-03
2260
7153선입선출 구현 [3]
tiger
2018-11-21
3021
7152. 관련 용어 [1]
권기혁
2018-11-20
2286
7151쿼리 문의드립니다. [3]
kris
2018-11-11
2156
7150쿼리문 질문 드립니다. [1]
gggg
2018-11-01
2077
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다