번호 | 판매 수량 | 과세1 수량 | 과세2 수량 | 과세1기준 수량 | 판매누적 수량 | 과세1기준 차감수량 | 과세1기준 총수량 | 과세1+2 기준총수량 |
1 | 1 | 0 | 1 | 3 | 0 | 3 | 0 | 1 (판매수량과 과세2수량이 같으면 과세2수량 표시) |
2 | 2 | 1 | 0 | 3 | 1 | 2 | 0 | 0 (과세2수량이 없을경우 과세1수량의 합을 감산) = 판매수량(2) - 과세수량(1) - 4번의 과세수량(1) = 0 |
3 | 2 | 0 | 0 | 3 | 3 | 0 | 2 | 1 (=판매수량(2) - 6번의 과세수량(1) = 1 |
4 | 3 | 1 | 1 | 3 | 5 | 0 | 3 | 3 (판매수량(3) - 과세1수량은 앞에서 사용하였으므로 = 0 , 과세1수량이 1 남아있으면 기준총수량은 2가됨 |
5 | 2 | 0 | 3 | 3 | 8 | 0 | 2 | 2 (과세2가 판매수량보다 클수 없으므로 2가됨) |
6 | 1 | 1 | 0 | 3 | 10 | 0 | 1 | 1 (과세1수량은 앞에서 사용하였으므로 0이됨) |
판매에 대한 과세1,과세2를 적용하여 과세1+2 기준총수량을 구하려고 합니다
기존에는 과세1기준을 총수량을 구해 사용하였는데
여기에 과세2의 로직을 더하여 구해야합니다
과세1기준총수량은 번호순으로 판매에서 과세1합(과세1기준수량)을 순차적으로 차감하여 구하였습니다
with Temp As
(
Select 1 번호, 1 판매, 0 과세1, 1 과세2
Union All Select 2, 2, 1, 0
Union All Select 3, 2, 0, 0
Union All Select 4, 3, 1, 1
Union All Select 5, 2, 0, 3
Union All Select 6, 1, 1, 0
) ,
res as
(
select 번호, 판매, 과세1, 과세2,
case when 판매>=0 then 판매 else 0 end+case when 과세1<0 then abs(과세1) else 0 end 판매수량,
case when 판매<0 then abs(판매) else 0 end+case when 과세1>=0 then 과세1 else 0 end 과세수량
from Temp
),
res1 as
(
select SUM(과세1) 과세1기준수량 from res
) ,
res2 as
(
select a.번호, a.판매, a.과세1, a.과세2, SUM(isnull(b.판매수량 ,0)) 판매누적수량
from res a
left join res b on a.번호 > b.번호
group by a.번호, a.판매, a.과세1, a.과세2
)
select a.번호, a.판매, a.과세1, a.과세2, 과세1기준수량, 판매누적수량,
(case when (과세1기준수량 - 판매누적수량) < 0 then 0 else (과세1기준수량 - 판매누적수량) end ) 차감수량,
(case when a.판매 - (case when (과세1기준수량 - 판매누적수량) < 0 then 0 else (과세1기준수량 - 판매누적수량) end) < 0
then 0
else a.판매 - (case when (과세1기준수량 - 판매누적수량) < 0 then 0 else (과세1기준수량 - 판매누적수량) end)
end) 과세1총수량
from res2 a , res1 b
너무 알아보기 힘들게 되어있네요...
내용이 뭔지 잘 모르겠습니다.