Sql 给定一组整数,找出它们是否可以加到一个数上

Sql 给定一组整数,找出它们是否可以加到一个数上,sql,sql-server,algorithm,math,Sql,Sql Server,Algorithm,Math,我们的数字是这些整数的和:[1,2,4] 例如,列表中的32+1、64+2、51+4、71+2+4数字只能使用一次。它们不能重复 现在我需要找到所有这样构造的数,它们的和中包括2 以下是我为这张短名单所写的内容: SELECT * FROM [TABLE] WHERE number = 2 OR number - 2 + 1 = 0 OR number - 2 + 1 + 4 = 0 OR number - 2 + 4 = 0 但假设我们在一个列表中有7个数字[1,2,4,8,16,72,

我们的数字是这些整数的和:[1,2,4]

例如,列表中的32+1、64+2、51+4、71+2+4数字只能使用一次。它们不能重复

现在我需要找到所有这样构造的数,它们的和中包括2

以下是我为这张短名单所写的内容:

SELECT * FROM [TABLE] WHERE number = 2
OR number - 2 + 1 = 0  
OR number - 2 + 1 + 4 = 0
OR number - 2 + 4 = 0
但假设我们在一个列表中有7个数字[1,2,4,8,16,72,128]

这样写显然太长了,我没能想出一些算法:


我希望问题很清楚

您可以使用递归CTE:

with n as (
      select v.n
      from (values (1), (2), (4)) v(n)
     ),
     cte as (
      select n as num, n as max_n, convert(varchar(max), n) as calculation
      from n
      union all
      select num + n.n, n.n as max_n, concat(calculation, ' + ', n.n)
      from cte join
           n
           on n.n > cte.max_n
     )
select distinct num, calculation
from cte;
他是一把小提琴

此版本还包括计算。如果有多种表示数字的方式,则数字可能会出现多次


上述操作生成所有组合。你可以在生成所有的2之后过滤到那些只有2个的。或者你可以单独处理2个-只需生成所有不含2的组合,然后将2添加到最终结果中。

这是否简单

从[Table]中选择*,其中数字&2=2 它使用查找具有2位设置的数字

编辑
我假设你用来创建和1,2,4的数字列表,。。都是2的幂。如果列表足够长,您可以将这些数字相加为任何正数,每个数字使用0或1次。

用您正在使用的数据库标记您的问题。我还假设数字不允许重复。是的,数字不允许重复。这是你的家庭作业吗?还是一场比赛?这是一个实习任务这是什么黑魔法?即使对于我尝试过的大量数字,它也像一种魅力。谢谢:我不知道你们两个答案中的哪一个我应该接受,既令人印象深刻又非常有帮助..这个任务让我想起了@dave12345。这不适用于数字列表中有72的示例。@dave12345。我不需要。我理解其中的数学知识。