需要光标帮助或替代光标使用

时间:2014-12-11 16:29:56

标签: sql

我有两张桌子。一个人每周记录每个记录的需求数量,另一个保持每周的供应量,但是在几个skus但是同一个家庭中。我需要做的是从第一个表中提取需求值,例如7000并从第一个记录中提取供应数量值并使用它来填充需求。如果可用的qty> =需求,它将填充该周的需求并停止。如果供应量较少,例如2000年,它将花费可用的金额来填充需求并转移到下一条记录并使用该值并继续这样做,直到该周的需求完成或者记录用完为止。每次使用一个值时,它将减少第一个表中的需求量,因此它不会保持不变。 我正在使用一个现在无法正常工作的游标,因为我认为没有保留需求,我可能需要在第一个游戏中嵌套第二个游标。

以下是我现在的代码,非常感谢您提供的任何帮助:

DECLARE @sku nvarchar (255)
Declare @filled float
Declare @endinv float
Declare @demand float

select @demand = (select demand from testDemand where Date = '2014-11-30')


DECLARE MyCursor CURSOR FOR
SELECT
    sku,
    filleddemand,
    [ending inventory] 

FROM Test 
where [model family] = '4S' and Date = '2014-11-30' and program ='test tech' and [ending inventory] > '0'


OPEN MyCursor
FETCH NEXT FROM MyCursor INTO
    @sku,
    @filled,
    @endinv

WHILE @@FETCH_STATUS = 0 

BEGIN

     if @endinv >= @demand
     SET @filled = @demand
    ELSE SET  @filled = @endinv



        update testDemand
        set Demand = Demand - t.filledsum
        FROM testdemand u INNER JOIN (select [model family], Date, sum(filleddemand) as filledsum
        from Test 
        group by [Model Family], Date) as t on t.[Model Family] = u.[Model Family] and u.Date = t.Date
        where  u.Date = '2014-11-30'

        UPDATE Test
        SET [Ending Inventory] = [Ending Inventory]- FilledDemand,
            Customers = 'testtech'
            from Test
            WHERE sku = @sku



FETCH NEXT FROM MyCursor INTO
    @sku,
    @filled,
    @endinv

End
CLOSE MyCursor
DEALLOCATE MyCursor

0 个答案:

没有答案
相关问题