Sql 需要使用while循环安排记录

Sql 需要使用while循环安排记录,sql,sql-server,Sql,Sql Server,当使用While循环获取细节时,我无法获得所需的细节。我想要的是应用循环并获得每个日期的详细信息。我正在使用SQL2008 Set @i = 1; While (@NoOfDays >= @i) Begin SET @ManufactureQty = (Select isnull(SUM(Quantity),0) as Manufactured from IGN1 inner join OIGN on (OIGN.DocEntry = IGN1.DocEn

当使用While循环获取细节时,我无法获得所需的细节。我想要的是应用循环并获得每个日期的详细信息。我正在使用SQL2008



    Set @i = 1;

    While (@NoOfDays >= @i)
    Begin

    SET @ManufactureQty = (Select isnull(SUM(Quantity),0) as Manufactured from IGN1 inner join OIGN on (OIGN.DocEntry = IGN1.DocEntry) 
    inner join OITM on (OITM.ItemCode = IGN1.ItemCode)
    where Convert(Date,Cast(OIGN.DocDate as DATE))  = Convert(Date,DATEADD(d, @i, @date)) and OITM.ItmsGrpCod = @ItemGroup)

    Select @i as D,OpeningBalance = case 
    when @i > 1 then ((isnull(SUM(OINM.InQty),0)-isnull(SUM(OINM.OutQty),0)) + ((isnull(SUM(OINM.InQty),0)-isnull(SUM(OINM.OutQty),0))))
    when @i = 1 then (isnull(SUM(OINM.InQty),0)-isnull(SUM(OINM.OutQty),0))
    end
    ,
    isnull(@ManufactureQty,0) as Manufacture
    From OITM
    Inner Join OINM  On (OINM.ItemCode = OITM.ItemCode and Convert(Date,Cast(OINM.DocDate as DATE)) = Convert(Date,DATEADD(d, @i, @date))) --and Convert(Date,Cast(OINM.DocDate as DATE)) > Convert(Date,'2014-05-01'))
    Where  OITM.ItmsGrpCod = @ItemGroup group by OINM.DocDate

    SET @i = @i + 1
    End

    It Gives 

    D  OpeningBalance Manufacture
    1  123            23

    D  OpeningBalance Manufacture
    2  143            773

    D  OpeningBalance Manufacture
    3  126            27
    .

    But I need it like

    D  OpeningBalance Manufacture
    1  123            23
    2  143            773
    3  126            27
    .
循环前:

create table #results (D int, OpeningBalance Int, Manufacture Int)
循环中

begin


insert into #results ...
select ...
end
--之后


为什么需要使用while循环?获得多个结果集的原因是循环中有一个select。将此转换为基于集合的方法不仅可以解决问题,而且速度会快得多。我需要循环,因为我必须检查每月每个日期的记录。这并不意味着您需要循环。从你发布的代码片段中,我没有看到任何东西表明你需要处理这个RBAR(一行一行的痛苦)。说你“急需它”是吸引对某个问题产生负面情绪的磁石。对你来说可能是紧急的,而不是对社区,我们在闲暇时会帮助你,所以你的紧急情况与我们无关。你很可能会使用数字或理货表。您只发布了部分代码,因此不可能在那里提供太多建议。这很好地解决了眼前的问题,但不幸的是,循环仍在发生。最好的解决方案是摆脱循环,但OP似乎决心保持循环。
select * from #results