안녕하세요 문의드릴 내용이 있어 글을 올립니다.
예를 들어 물건 리스트가 있는 테이블이 존재합니다
==================
물건명 가격
==================
a1 100000
a2 500000
a3 600000
a4 700000
a5 800000
a6 900000
a7 1000000
과 같은 테이블이 있다고 가정할경우
비싼 물건부터 Sum을 하여 1650000 원에 근접할때까지의 합을 구하는 방법이 궁금합니다.
아시는분 있으시면 말씀 부탁드립니다.
Comment 1
-
건우아빠
2017.03.16 18:53
http://www.sqler.com/863670 참고 : 경우의수
DECLARE @TB_LIST TABLE
(
ROWNUM varchar
, AMT INT
)
INSERT INTO @TB_LIST VALUES (1, 100000)
INSERT INTO @TB_LIST VALUES (2, 500000)
INSERT INTO @TB_LIST VALUES (3, 600000)
INSERT INTO @TB_LIST VALUES (4, 700000)
INSERT INTO @TB_LIST VALUES (5, 800000)
INSERT INTO @TB_LIST VALUES (6, 900000)
INSERT INTO @TB_LIST VALUES (7, 1000000)
declare @ROWNUM as int
;
set @ROWNUM = (select count(*) from @TB_LIST);
;
with T (ROWNUM, level,amt) as (
select convert(varchar, ROWNUM), level=1 , amt from @TB_LIST
union all
select convert(varchar,a.ROWNUM+','+T.ROWNUM),level+1 , a.amt+t.amt
from @TB_LIST a,T
where level < @ROWNUM
and charindex(a.ROWNUM,T.ROWNUM) = 0
)
select ROWNUM, amt , amt - 1650000
from T
order by abs(amt - 1650000 ) , reverse(ROWNUM) desc ;
with T (ROWNUM, level,amt) as (
select convert(varchar, ROWNUM), level=1 , amt from @TB_LIST
union all
select convert(varchar,a.ROWNUM + ','+T.ROWNUM),level+1, a.amt+t.amt
from @TB_LIST a,T
where level < @ROWNUM
and charindex(a.ROWNUM,T.ROWNUM) = 0
and t.ROWNUM > a.ROWNUM
)
select ROWNUM, amt , amt - 1650000
from T
order by abs(amt - 1650000 ) , reverse(ROWNUM) desc
;