初步数据:有条件的100人吃坚果,糖果,苹果.总共,苹果,糖果,坚果的最大数量,1000件为所有人。这些人每天吃两顿饭,每人吃不同数量的糖果、苹果和坚果。他们第一次吃了多少坚果、糖果、苹果都是众所周知的。我们需要计算他们在第二餐中可以吃多少,如果每个人每天最多可以吃10个糖果、苹果和坚果。他们轮流吃,我需要计算他们每个人今天还能吃多少糖果、苹果和坚果。因此,我需要计算出,从原来的1000块坚果,糖果,苹果之后,每个人剩下了多少东西。每个人能多吃多少坚果,糖果,苹果,考虑到最后一餐,并考虑到他们每天最多可以吃10块坚果,糖果,苹果,我认为这应该通过递归来解决,在每次迭代中使用以前的记录和当前的记录。或者你能给我其他解决办法吗?我弄错了一张桌子:
select 1 num, 1 s, 50 ss, 11 b, 20 bs
union
select 2 num, 1 s, 101 ss, 11 b, 50 bs
union
select 3 num, 2 s, 103 ss, 12 b, 50 bs我需要通过num在每次迭代中递归地将其中的每条线与我自己以及前面的行连接起来。
1 iteration:
[n num s ss b bs num_ s_ ss_ b_ bs_
1 1 1 50 11 20 1 1 50 11 20][1]
2 iteration:
[n num s ss b bs num_ s_ ss_ b_ bs_
2 2 1 101 11 50 2 1 50 11 20
2 2 1 101 11 50 2 1 101 11 50][2]
3 iteration:
[n num s ss b bs num_ s_ ss_ b_ bs_
3 3 2 103 12 50 3 1 50 11 20
3 3 2 103 12 50 3 1 101 11 50
3 3 2 103 12 50 3 2 103 12 50][3]
Total:在每一次迭代中,我将做更多的计算,所以我正在寻找一种方法来输出这样的一个递归,只有一个计算部分。下面是我的尝试,但它未能将当前锚部分添加到迭代中:
with a as
(
select 1 num, 1 s, 50 ss, 11 b, 20 bs
union
select 2 num, 1 s, 101 ss, 11 b, 50 bs
union
select 3 num, 2 s, 103 ss, 12 b, 50 bs
)
--select * from res
,
rec as (
select 1 n, a.num, a.s, a.ss, a.b, a.bs, a.num num_, a.s s_, a.ss ss_, a.b b_, a.bs bs_ from a where num =1
union all
select n+1, a.num, a.s, a.ss, a.b, a.bs, rec.num num_ , rec.s s_, rec.ss ss_, rec.b b_, rec.bs bs_ from rec,a
where a.num=rec.num+1-- and a.num<>rec.num_
)
select top 20 * from rec order by n,num, num_发布于 2022-06-08 07:51:07
我很难理解你的需要。您提到了递归、迭代和计算,但是我没有看到这样的事情。您指示的结果集可以使用这个简单的自连接:
with a as
(
select 1 num, 1 s, 50 ss, 11 b, 20 bs
union
select 2 num, 1 s, 101 ss, 11 b, 50 bs
union
select 3 num, 2 s, 103 ss, 12 b, 50 bs
)
select *
from
a
inner join a a_prev on a_prev.num<=a.num
order by a.num,a_prev.numhttps://stackoverflow.com/questions/72514136
复制相似问题