cómo seleccionar valores que sumn hasta el 60% del total

Supongo que tengo una table de este tipo:

AB 3
CD 1
EF 2
GH 4

La sum de la última columna es 10, y quiero los valores más grandes que sumen hasta al less el 60% del valor total. Entonces, en este caso, volverá

GH 4
AB 3

Sube al 70%, pero si solo se seleccionó el primer valor, solo uploadá al 40%. Aunque podría haber una combinación que devolverá exactamente el 60%, queremos tomar el mayor número.

Por lo tanto, creo que sé cómo orderar los valores de mayor a menor y cómo resumir todos los valores, pero no sé cómo tomar solo las líneas que sumn hasta un 60%.

--save the whole sum into a variable summa = select sum(val) from sometable; select * from sometable o where ( select sum(val) from sometable i where i.val <= o.val ) >= 0.6*summa; 

Creo que esto te da el resultado correcto. Sin embargo, es necesario trabajar con una tabla temporal, no estoy seguro si esto puede evitarse.

 DECLARE @total bigint select @total = SUM(value) from SampleTable select st.*, convert(decimal(10,2), (select SUM(value) from SampleTable st2 where st2.Value >= st.Value))/@total as percentage into #temptable from sampletable st select * from #temptable where Value >= (select max(Value) from #temptable where percentage >= 0.6)