• Thanks for your encouragement! Sorry, I have been on vacation. I will include the two tables and some code now.

    Vehicle Detail:

    VinSerialNumberProgYearLeaseCycleModelNameRiskNonriskFlagRegionReturnDate

    ZL1529831FADP3K22ZL152983131FOCUSRSOUTHEAST

    ZL1852231FADP3K20ZL185223131FOCUSRSOUTHEAST

    ZL1965361FADP3F27ZL196536131FOCUSRSOUTHEAST

    ZL2652731FADP3F27ZL265273131FOCUSRSOUTHEAST

    ZL1965801FADP3F2XZL196580131FOCUSRSOUTHEAST

    ZL1965901FADP3F22ZL196590131FOCUSRSOUTHEAST

    ZL1711981FADP3F29ZL171198131FOCUSRSOUTHEAST

    ZL1712581FADP3F21ZL171258131FOCUSRSOUTHEAST

    ZL1712681FADP3K27ZL171268131FOCUSRSOUTHEAST

    ZL2115291FADP3F2XZL211529131FOCUSRSOUTHEAST

    ZL2115321FADP3F2XZL211532131FOCUSRSOUTHEAST

    ZL2116171FADP3F27ZL211617131FOCUSRSOUTHEAST

    Returns Pros:

    RegionProgYearRiskNonRiskFlagMFGLeaseCycleModelNameReturnDateUnitCount

    Southeast13RFRD1FOCUS1/4/201412

    I agree with you about the looping, but have not been able to figure out a way to do it without looping. The problem is that the UnitCount column from the "Returns Pros" table becomes the top value in the query - hence the need for a "dynamic" (concatenated) SQL query.

    The following looping code is what shaved an hour:

    DECLARE @RowCount INT

    SET @RowCount = (SELECT COUNT(MFG) FROM [Returns Pros])

    CREATE TABLE #tmpReturns(ID INT IDENTITY (1,1) PRIMARY KEY, MFG VARCHAR(20), ModelName VARCHAR(20), ProgYear VARCHAR(12),ReturnDate DATETIME,RiskNonRiskFlag VARCHAR(12), LeaseCycle VARCHAR(12), Region VARCHAR(50), UnitCount INT)

    --CREATE UNIQUE CLUSTERED INDEX Idx1 ON #tmpReturns(ID);

    INSERT INTO #tmpReturns SELECT MFG, ModelName, ProgYear, ReturnDate, RiskNonRiskFlag, LeaseCycle, Region, UnitCount FROM [Returns Pros]

    -- Declare an iterator

    DECLARE @I INT

    -- Initialize the iterator

    SET @I = 1

    SET NOCOUNT ON

    -- Loop through the rows of a table @myTable

    WHILE (@I <= @RowCount)

    BEGIN

    -- Declare variables to hold the data which we get after looping each record

    DECLARE @mfg VARCHAR(50), @ModelName VARCHAR(50), @ProgYear VARCHAR(50)

    DECLARE @ReturnDate DateTime, @RiskFlag VarChar(25), @LeaseCycle VarChar(2)

    DECLARE @Region VARCHAR(50), @UnitCount VarChar(20), @SQL VarChar(450)

    -- Get the data from table and set to variables

    SELECT @mfg=mfg, @ModelName=ModelName, @ProgYear=ProgYear, @ReturnDate=ReturnDate, @RiskFlag=RiskNonRiskFlag,

    @LeaseCycle=LeaseCycle, @Region=Region, @UnitCount=UnitCount

    FROM #tmpReturns WHERE ID=@I

    -- Display the looped data

    Set @SQL ='UPDATE [Vehicle Detail] SET [Vehicle Detail].ReturnDate=''' + Cast(@ReturnDate as VarChar(20)) +

    ''' WHERE SerialNumber in (Select Top ' + @UnitCount + ' SerialNumber From [Vehicle Detail] WHERE MFG='''

    + @MFG + ''' And ModelName=''' + @ModelName + ''' And ProgYear=''' + @ProgYear + ''' And RiskNonRiskFlag='''

    + @RiskFlag + ''' And LeaseCycle=''' + @LeaseCycle + ''' And Region=''' + @Region + ''' And ReturnDate Is Null '

    + 'ORDER BY [Vehicle Detail].DeliveryDate, [Vehicle Detail].[SerialNumber])'

    Exec (@sql)

    -- Increment the iterator

    SET @I = @I + 1

    End