Home Forums SQL Server 2008 SQL Server Newbies Update FIELD from Select Aggregated Statement on second table RE: Update FIELD from Select Aggregated Statement on second table

  • Here's a guess:

    -- ALWAYS check first using a SELECT

    SELECT

    l.rack, l.bay, l.height, l.qty, x.TotalStock, x.Warehouse, x.Bin

    FROM [SLGWarehouseLayout] l

    CROSS APPLY (

    SELECT SUM(i.QtyOnHand1) AS TotalStock, i.Warehouse, i.Bin

    FROM InvMultBin i

    WHERE i.Warehouse IN ('W1','SC')

    AND i.QtyOnHand1 <> 0

    AND LEFT(i.Bin, 1) = LEFT(l.Rack, 1)

    AND SUBSTRING(i.Bin, 3, 2) = LEFT(l.Bay, 2)

    AND SUBSTRING(i.Bin, 2, 1) = LEFT(l.Height, 1)

    GROUP BY i.Warehouse, i.Bin

    HAVING SUM(i.QtyOnHand1) > 0

    ) x

    -- If the SELECT works, convert it to the UPDATE equivalent

    UPDATE l SET

    qty = x.TotalStock

    FROM [SLGWarehouseLayout] l

    CROSS APPLY (

    SELECT SUM(i.QtyOnHand1) AS TotalStock

    FROM InvMultBin i

    WHERE i.Warehouse IN ('W1','SC')

    AND i.QtyOnHand1 <> 0

    AND LEFT(i.Bin, 1) = LEFT(l.Rack, 1)

    AND SUBSTRING(i.Bin, 3, 2) = LEFT(l.Bay, 2)

    AND SUBSTRING(i.Bin, 2, 1) = LEFT(l.Height, 1)

    GROUP BY i.Warehouse, i.Bin

    HAVING SUM(i.QtyOnHand1) > 0

    ) x

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden