我有兩個表 - 我們姑且稱之爲dbo.ValuesToReduce和dbo.Reserve 在第一表中的數據(dbo.ValuesToReduce)是:減少一個表中的值,直到儲備在另一個表中消耗 - 遞歸?
ValuesToReduceId | PartnerId | Value
-------------------------------------
1 | 1 | 53.15
2 | 2 | 601.98
3 | 1 | 91.05
4 | 2 | 44.56
5 | 3 | 19.11
第二個表(dbo.Reserve)看起來像這樣
ReserveId | PartnerId | Value
-------------------------------
1 | 1 | -101.55
2 | 2 | -425.19
3 | 3 | -28.17
我需要做的是:使用後面的Reserves表更新ValuesToReduce表中的值,減少數量直到備用電源耗盡。這就是我要運行腳本後得到:
ValuesToReduceId | PartnerId | Value
-------------------------------------
1 | 1 | 0.00
2 | 2 | 176.79
3 | 1 | 42.65
4 | 2 | 44.56
5 | 3 | 0.00
ReserveId | PartnerId | Value
-------------------------------
1 | 1 | 0.00
2 | 2 | 0.00
3 | 3 | -9.06
因此,基本上,每個合作伙伴都有「儲備」,他會耗盡,並在值表中的值應該由相應的合作伙伴可以減少,如果仍然有東西在儲備。儲備應按照ValuesToReduceId提供的順序配置。
對於1 PARTNERID的合作伙伴,你可以看到,他有足夠的儲備來更新他的第一個值爲0,仍然有一些留下來減少由量的第二值。
ID爲2的合作伙伴有425.19的儲備金,該合作伙伴的價值表中有兩個條目601.98和44.56(按ValuesToReduceId),所以我們只更新了儲備金以來的第一個值對於兩者來說都不夠大。錯誤的方法是將第二個值更新爲0.00,第一個值更新爲221.35。
合作伙伴與3號有足夠的儲備比較多,所以他的值更新爲0後,他留下了-9.06
我試着用遞歸CTE的東西,但我似乎無法左右我的頭它。 希望我所描述的問題不夠清楚..
爲什麼你必須使用一個CTE?看來,VB和SQL的組合會產生更簡單的解決方案。 VB可以執行循環,if then else邏輯和SQL可以選擇和更新記錄? – heferav 2009-10-14 09:16:37
它必須是純SQL – 2009-10-14 10:46:21