2

我有一个关于在非常特殊的情况下使用递归 SQL 的问题,我将在下面描述。

我有一个带有(ID, value)架构的表 A 和这些示例行:

(1,1000)
(2,800)
(3,300)
(4,600)

我有一个带有(ID, value)架构的表 B 和这些示例行:

(1,600)
(2,300)
(3,400)
(4,600)
(5,600)
(6,400)

目的是我必须从 A 中选择最大 ID,从 B 中选择最大 ID,然后从 A 中的值中减去 B 中的值,并为像这样的任何操作生成一行。

最终结果应该是一个模式(ID-A、ID-B、减法值),生成的行将是这些:

(1,1,600) 在 A.ID=1 中保持 400,在 B.ID=1 中保持 0
(1,2,300) 在 A.ID=1 中保持 100,在 B.ID=2 中保持 0
(1,3,100) 在 A.ID=1 中保持 0,在 B.ID=3 中保持 300
(2,3,300) 在 A.ID=2 中保持 500,在 B.ID=3 中保持 0
(2,4,500) 在 A.ID=2 中保持 0,在 B.ID=4 中保持 100
(3,4,100) 在 A.ID=3 中保持 200,在 B.ID=4 中保持 0
(3,5,200) 在 A.ID=3 中保持 0,在 B.ID=5 中保持 400
(4,5,400) 在 A.ID=4 中保持 200,在 B.ID=5 中保持 0
(4,6,200) 在 A.ID=4 中保持 0,在 B.ID=6 中保持 200

此时其中一张表中的行已完成,我需要停下来!

我不知道这是否可以使用递归 SQL,当然我认为我必须合并表 A 和 B 以生成一个固定表,我可以在该表上进行计算并生成我上面解释的内容,但我不知道如何管理我事先不知道的其余部分,例如时间 t 的值取决于 t-1 发生的情况)。

您有什么建议,一些链接可以帮助我了解是否可以使用递归 SQL 来管理它?

非常感谢您提前。

4

1 回答 1

0

这个过程本质上没有递归。它被描述为一个迭代过程,它是一个迭代过程。

您将 B 值按顺序分配给 A,但要遵守一个简单的条件:B 的总和不超过每个桶中的 A 值。您可以通过在 A 和 B 上设置单独的光标来使用光标来执行此操作。然后根据这个简单的规则继续进行分配。

我想不出一种方法来使用 SQL 中的集合逻辑来做到这一点。但是,使用游标的迭代方法可能是您的最佳解决方案。

于 2013-01-04T15:25:38.147 回答