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 のままです。

この時点で、テーブルの 1 つの行が終了したので、停止する必要があります。

これが再帰SQLで可能かどうかはわかりません。確かに、テーブルAとBをマージして、計算を実行して上記で説明したものを生成できる固定テーブルを生成する必要があると思いますが、そうしませんアプリオリにわからない休符を管理する方法を知っています。たとえば、時間 t の値は t-1 で何が起こったかに依存します)。

再帰SQLでこれを管理できるかどうかを理解するのに役立つアドバイスやリンクはありますか?

事前にどうもありがとうございました。

4

1 に答える 1

0

このプロセスには本質的に再帰的なものはありません。これは反復プロセスとして説明されており、反復プロセスです。

B の値を A に順番に割り当てます。単純な条件は、B の合計が各バケットの A の値を超えないことです。A と B に別々のカーソルを設定することにより、カーソルを使用してこれを行うことができます。次に、この単純なルールに基づいて割り当てを行います。

SQLでセットロジックを使用してこれを行う方法は考えられません。ただし、カーソルを使用した反復アプローチが最善の解決策になる場合があります。

于 2013-01-04T15:25:38.147 に答える