Create table Test01
(바코드 varchar(10) null
, 판매금액 decimal(12,2) null
, 적립여부 varchar(1) null
, 포인트 decimal(12,2) null
)
insert into Test01 (바코드,판매금액, 적립여부, 포인트) values ('11111',1500,'Y','0')
insert into Test01 (바코드,판매금액, 적립여부, 포인트) values ('22222',2750,'Y','0')
insert into Test01 (바코드,판매금액, 적립여부, 포인트) values ('33333',2550,'N','0')
insert into Test01 (바코드,판매금액, 적립여부, 포인트) values ('44444',3000,'Y','0')
insert into Test01 (바코드,판매금액, 적립여부, 포인트) values ('55555',200,'N','0')
select sum(판매금액) from Test01 where 적립여부 = 'Y' --7250
[포인트 : 250원]
-"포인트" 은 "적립여부"가 'Y' 인 항목의판매금액 합으로 계산됨.
질문)
포인트 입력시 계산을 어떻게 해야 되는지 질문드립니다.
"적립여부"가 'Y' 인 각 상품이 7250원에서 차지하는 비율을 계산하고, 이 비율로 적립액 250원에 대입해서 계산하면 되는데(소수점 2자리까지 표현) , 이때 비율로 계산후 합계가 250원이 딱 맞아 떨어지지 않을수 있기에 이걸 어떻게 처리 해야 할지 질문드립니다.
감사합니다.
본 적립율에 따라 개별 상품의 point 를 계산되고 내역의 합으로 계산하시는게 간편할듯 합니다만.
declare @point decimal
set @point = 250. ;
with res as
(
select 1500 amt ,'Y' p_gb union all
select 2750 s ,'Y' y union all
select 2550 s ,'N' y union all
select 3000 s ,'Y' y union all
select 200 s ,'N' y )
select * , convert(integer, amt * ( @point / sum(amt) over(partition by 1) ) )
+ case when row_number() over ( order by amt desc ) = 1 then ( @point - convert( integer, (@point/ sum(amt) over(partition by 1)) * sum(amt) over(partition by 1)) ) else 0 end point
from res
where p_gb = 'Y'