테이블데이터가 아래와 같을때..
key qty
===========
a 2
b 3
c 3
d 9
e 1
qty, key가 작은수, 작은문자부터 계산해서 sum(qty)가 6인 걸 뽑아내려합니다
결과
key qty
===========
a 2
b 3
e 1
만약 sum(qty)가 11을 뽑아 낼땐 아래 결과 처럼 마지막 계산한 qty의 필요수량(div)만 별도 컬럼으로 표현해야합니다
결과
key qty div
==================
a 2
b 3
c 3
d 9 2
e 1
key의 순서는 상관없습니다
간단할거같은데도 잘 되지 않네여 ㅠㅠ
금손님들 도움이 필요합니다
Comment 1
-
건우아빠
2019.10.10 15:17
참고 http://www.sqler.com/935490
DECLARE @TB_LIST TABLE
(
[key] varchar
, [qty] INT
)
INSERT INTO @TB_LIST VALUES ('a', 2)
INSERT INTO @TB_LIST VALUES ('b', 3)
INSERT INTO @TB_LIST VALUES ('c', 3)
INSERT INTO @TB_LIST VALUES ('d', 9)
INSERT INTO @TB_LIST VALUES ('e', 1)
declare @key as int , @qty as numeric
;set @qty = 12
;set @key = (select count(*) from @TB_LIST);
;
with T ( [key] , [qty], level) as (
select convert(varchar, [key]), qty , level = 1 from @TB_LIST
union all
select convert(varchar,a.[key]+','+T.[key]),a.qty+T.[qty] qty , level+1
from @TB_LIST a,T
where level < @key
and t.[key] > a.[key]
and charindex(a.[key],T.[key]) = 0
)
select [key] , [qty]
from T
where qty = @qty
order by qty, level, [key]
;