쿼리 조언 하나만 부탁드립니다. 일자별 복제 0 4 484

by 천우신쭝 [2019.05.30 09:46:59]


예약번호 일자 수량
ABCD00001 21 100
ABCD00001 14 50
ABCD00001 11 70

이런 TABLE이 있는데요...

예약번호 일자 수량
ABCD00001 21 100
ABCD00001 20 100
ABCD00001 19 100
ABCD00001 18 100
ABCD00001 17 100
ABCD00001 16 100
ABCD00001 15 100
ABCD00001 14 50
ABCD00001 13 50
ABCD00001 12 50
ABCD00001 11 70
ABCD00001 .... 70
ABCD00001 1 70

원하는 결과는 위와 같습니다.

즉 원테이블에서 사이 기간만큼 같은 ROW를 복사해줘야 되는데....생각보다 어렵네요 ㅠㅠ

일자는 항상 21~0까지 이며,,,원 table의 시작 일자는 항상 21부터 시작입니다.

 

 

by 우리집아찌 [2019.05.30 10:30:44]

일자가 0부터인가요?

시작일자 21일이 무슨뜻인가요?

예약번호는 항강 같은가요(조건절에 예약번호가 있는지)

 


by 천우신쭝 [2019.05.30 10:45:32]

트럭에 실린 물량의 예약 번호별로 일자별로 변동돈 수량에 대해서 21일전부터 보관하는게 원 TABLE입니다.

0일은 트럭이 출발한 날짜라고 보시면 됩니다.

즉 21일 전에는 100개 실리고 했는데...14일에는 50개 실리는 계획이고 11일 전에는 70개이고..이후에는 변동이 없으니 0일전(출발당일)에는 70개가 실리게 됩니다.

따라서 21일 전 20일전 19일전.....0일...까지의 데이터를 보여줘야 하는 상황입니다.


by 마농 [2019.05.30 11:02:03]
WITH t AS
(
SELECT 'ABCD00001' no, 21 dd, 100 cnt FROM dual
UNION ALL SELECT 'ABCD00001', 14,  50 FROM dual
UNION ALL SELECT 'ABCD00001', 11,  70 FROM dual
)
SELECT b.no
     , a.dd
     , LAST_VALUE(b.cnt) IGNORE NULLS OVER(PARTITION BY b.no ORDER BY a.dd DESC) cnt
  FROM (SELECT LEVEL - 1 dd FROM dual CONNECT BY LEVEL <= 22) a
  LEFT OUTER JOIN t b
  PARTITION BY (b.no)
    ON a.dd = b.dd
;

 


by 마농 [2019.05.31 16:35:48]
WITH t AS
(
SELECT 'ABCD00001' no, 21 dd, 100 cnt FROM dual
UNION ALL SELECT 'ABCD00001', 14,  50 FROM dual
UNION ALL SELECT 'ABCD00001', 11,  70 FROM dual
)
SELECT *
  FROM t
 MODEL
 PARTITION BY (no)
 DIMENSION BY (dd)
 MEASURES (cnt)
 RULES (cnt[FOR dd FROM 21 TO 0 DECREMENT 1] = NVL(cnt[CV()], cnt[CV()+1]))
 ORDER BY no, dd DESC
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입