J'ai une fonction table valorisée qui retourne l'ensemble des lignes qui correspond à une somme donnée, Cela fonctionne bien avec des valeurs positives mais pas avec des valeurs négatives.Les valeurs négatives de la somme des sous-ensembles SQL
Quelqu'un peut-il modifier cette fonction pour travailler avec les valeurs positives et négatives (champ de prix)
La fonction prend une table avec des valeurs décimales, puis revenez la première combinaison de lignes qui correspondent à une somme donnée dans le paramètre:
Par exemple, si l'@psum = 9 et le tableau ci-dessous:
n id price
1 1 4.00
2 2 4.00
3 3 5.00
4 4 6.00
5 5 8.00
sORTIR est mis:
select * from SubsetSum2(9)
n id price
3 3 5.00
2 2 4.00
alter FUNCTION [dbo].[SubsetSum2](@psum int)
RETURNS @tt table (n int,id int, price numeric(20,2))
AS
BEGIN
declare @t table (n int IDENTITY(1,1), id int, price numeric(20,2))
insert into @t -- note asc order of book prices
select 1, 4 union all
select 2, 4 union all
select 3, 5 union all
select 4, 6 union all
select 5, 8
declare @rows int, @p numeric(20,2), @sum numeric(20,2) set @sum= 9
delete from @t where price>@sum
set @p=(select sum(price) from @t)
if @p>= @sum
begin --1
set @rows=(select max(n) from @t)
declare @n int, @s numeric(20,2)
set @[email protected]+1 set @s=0
while 0=0
begin --2
while @n>1
begin --3
set @[email protected]
if @s+(select price from @t where [email protected])<[email protected]
and @s+(select sum(price) from @t where n<[email protected])>[email protected]
begin --4
set @[email protected]+(select price from @t where [email protected])
insert into @tt select n, id, price from @t where [email protected]
if @[email protected] return ;
end --4
end --3
set @n=(select min(n) from @tt)
set @[email protected](select price from @tt where [email protected])
delete from @tt where [email protected]
if @s=0 and (select sum(price) from @t where n<@n)<@sum break
end --2
end --1
return
END
Veuillez nous faire gagner du temps en nous disant ce que la fonction fait par rapport à ce qu'elle devrait faire. avec quelques exemples de sortie. – Stephen
'-5 + 5 + 5 + 4 = 9' n'est-ce pas? voulez-vous que vos montants négatifs soient traités comme positifs? – Stephen
oui c'est correct, mais la fonction ne fonctionne pas avec cet exemple. – oussama