그룹별 소모량 누계계산 0 2 547

by 성호 [SQL Query] [2017.12.12 14:51:37]


그룹 순번 잔여량
A 1 35
A 2 40

그룹 순번별 수량이 각각 존재합니다.

그룹 20171201 20171202 20171203 20171204 20171205 20171206 20171207 20171208 20171209 20171210
A 10 10 10 10 10 10 10 10 10 10

그룹 A의 일자별 사용량 그룹별 소모량만 있지 순번별로 분류되어 있지 않습니다. 테이블은 날짜를 열로 표시했지만

실제로 그룹,날짜,소모량 이렇게 구성된 테이블이라 보시면 됩니다.

조건 1.

그룹 순번 사용시작날짜 사용종료날짜 사용유무
A 1 20171201 20171207 N
A 2 20171203 20171210 N
A 3 20171101 20171130 Y

각 일자별 사용가능 일자가 있기 때문에 사용유무는 무시하고 해당 날짜에 해당 순번을 소모처리합니다.

만약 같은 날짜에 순번1,2가 다 사용가능 할 경우 순번이 빠른거부터 소모하고 빠른 순번이 0될때는 다음 순번을

소모시킵니다. 그 다음 순번이 존재하지 않을 시에 마지막 순번을 (-) 수량 처리시킵니다.

 

결과

그룹 순번 20171201 20171202 20171203 20171204 20171205 20171206 20171207 20171208 20171209 20171210
A 1 25 15 5 0 0 0 0 0 0 0
A 2 40 40 40 35 25 15 5 -5 -15 -25

 

 

조건 1.

그룹 순번 사용시작날짜 사용종료날짜 사용유무
A 1 20171201 20171205 N
A 2 20171206 20171210 N
A 3 20171101 20171130 Y

위와 조건이 같고 날짜별로 안겹칠 경우 

 

결과

그룹 순번 20171201 20171202 20171203 20171204 20171205 20171206 20171207 20171208 20171209 20171210
A 1 25 15 5 -5 -15 0 0 0 0 0
A 2 40 40 40 40 40 30 20 10 0 -10

조건 2.

그룹 순번 사용시작날짜 사용종료날짜 사용유무
A 1 20171201 20171204 N
A 2 20171206 20171210 N
A 3 20171101 20171130 Y

사용가능 날짜 중 20171205 처럼 소모량은 있으나 날짜가 없을때는 사용유무에 Y인걸 소모처리 합니다.

만약 날짜가 해당처럼 하루만 빠지는게 아니고 아에 없으면 순번 3으로만 사용처리가 되야됩니다.

그룹 순번 20171201 20171202 20171203 20171204 20171205 20171206 20171207 20171208 20171209 20171210
A 1 25 15 5 -5 -5 -5 -5 -5 -5 -5
A 2 40 40 40 40 40 30 20 10 0 -10
A 3 0 0 0 0 -10 -10 -10 -10 -10 -10

 

조건 2.

그룹 순번 사용시작날짜 사용종료날짜 사용유무
A 1 20171101 20171104 N
A 2 20171106 20171110 N
A 3 20171101 20171130 Y

사용가능 날짜 중 20171205 처럼 소모량은 있으나 날짜가 없을때는 사용유무에 Y인걸 소모처리 합니다.

만약 날짜가 해당처럼 하루만 빠지는게 아니고 아에 없으면 순번 3으로만 사용처리가 되야됩니다.

그룹 순번 20171201 20171202 20171203 20171204 20171205 20171206 20171207 20171208 20171209 20171210
A 3 -10 -20 -30 -40 -50 -60 -70 -80 -90 -100

 

해당쿼리가 머리 속에서 전혀 떠오르지 않습니다.

 

조건 1, 조건 2 어느것도 해결을 못하고 있습니다.

 

도움 부탁드립니다.

 

by 마농 [2017.12.12 15:50:46]

굳이 쿼리로 해야 하나요? PL/SQL 로 하셔야 할 것 같네요.
순번은 항상 (1,2,3) 3개 뿐인가요? Y 는 항상 3 이구요?
일자를 옆으로 늘여 놓으셨는데? 실제로는 아래로 되어 있겠죠?


by 성호 [2017.12.12 15:58:38]

꼭 쿼리로 안해도 됩니다.

어떤식으로 문제를 해결해야 될지 판단이 안서서요

그룹이 한개로 예를 들었는데 실제로 한개가 아니고 각 그룹별로

순번은 한개이상이지만 한개가 있을수도 3개 이상일수도 있어요

일자는 아래로 되어있는게 맞아요

PL/SQL로 해결할 경우 어떻게 해결해야 될까요?

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