Reputation: 119
I am creating the SQL query which will update Quantities of 'Table A' from from 'Table B'. However couple of fields in the Table B are not to be sum and their latest value (First or Last row value based on Date Order) is also to be updated in the 'Table A'. Below is the query sofar.
UPDATE r
SET r.Completed = t.MoveQty, r.Scrapped = t.ScrapQty, r.ReWork = t.ReworkQty
FROM JobRoutings r
INNER JOIN
(
SELECT JobID, ScanFromProcessID, SUM(ScanMoveQty) MoveQty, Sum(ScanScrapQty) ScrapQty, Sum(ScanRecutQty) ReworkQty
FROM JobTrans
GROUP BY JobID, ScanFromProcessID
) t ON r.JobID = t.JobID AND r.ProcessID = t.ScanFromProcessID;
Fields which are needed to be included in the above query are:
Latest value of [JobTrans
].ScannedDate and [JobTrans
].PC [ORDER BY ScannedDate] need to update [JobRoutings
].LastScanDate and [JobRoutings
].PC
Upvotes: 0
Views: 194
Reputation: 4334
Here's a way that joins a 2nd subquery and gets the latest PC/ScannedDate values using ROW_NUMBER():
UPDATE r
SET r.Completed = t.MoveQty, r.Scrapped = t.ScrapQty, r.ReWork = t.ReworkQty, r.LastScanDate = t.ScannedDate, r.PC = t.PC
FROM JobRoutings r
INNER JOIN
(
SELECT JobTrans.JobID, JobTrans.ScanFromProcessID, t2.ScannedDate, t2.PC, SUM(ScanMoveQty) MoveQty, Sum(ScanScrapQty) ScrapQty, Sum(ScanRecutQty) ReworkQty
FROM JobTrans
INNER JOIN
(
SELECT JobID, ScanFromProcessID, ScannedDate, PC, ROW_NUMBER() OVER (PARTITION BY JobID, ScanFromProcessID ORDER BY ScannedDate DESC) AS rn
FROM JobTrans
)t2 ON JobTrans.JobID = t2.JobID AND JobTrans.ScanFromProcessID = t2.ScanFromProcessID AND t2.rn = 1
GROUP BY JobTrans.JobID, JobTrans.ScanFromProcessID, t2.ScannedDate, t2.PC
) t ON r.JobID = t.JobID AND r.ProcessID = t.ScanFromProcessID
Upvotes: 1