UPDATE tDataCollection SET tDataCollection.AmountExGST = DC4.AmountExGST, tDataCollection.GSTAmount = DC4.GSTAmount, tDataCollection.AmountIncGST = DC4.AmountIncGST FROM ( SELECT DC3.*, CAST((DC3.AmountExGST + DC3.GSTAmount) AS money) AS "AmountIncGST" FROM (SELECT DC2.ID, DC2.AmountExGST, CAST((CASE WHEN tDataCollection.GSTFlag LIKE 'Y' THEN (DC2.AmountExGST * 0.1) ELSE 0 END) AS money) AS "GSTAmount" FROM (SELECT DC1.ID, (Max(tRate.Cost)/12) AS "AmountExGST" FROM ((SELECT DC0.ID, DC0.ServiceID, (CASE WHEN DC0.TEC IS NULL THEN 0 WHEN DC0.TEC = 'XX' THEN 0 WHEN DC0.TEC = 'NN' THEN NULL WHEN DATALENGTH(RTRIM(DC0.TEC)) = 0 THEN 0 ELSE CAST(DC0.TEC AS int) END) AS "Length" FROM (SELECT tDataCollection.ID, tDataCollection.ServiceID, SUBSTRING(tDataCollection.Var09,2,2) AS "TEC" FROM tDataCollection LEFT JOIN tTransactionType ON tDataCollection.TransactionTypeID = tTransactionType.ID LEFT JOIN tTransactionGroup ON tTransactionType.TransactionGroupID = tTransactionGroup.ID WHERE tDataCollection.BatchID = 24299 AND tTransactionGroup.Description LIKE 'RENT') AS DC0) AS DC1 LEFT JOIN tServiceID AS SI1 ON DC1.ServiceID = SI1.ServiceID) INNER JOIN tRate ON ((SI1.ServiceTypeID = tRate.ServiceTypeID) AND (ROUND(DC1.Length,0,0) = ROUND(tRate.Length,0,0))) WHERE DC1.Length IS NOT NULL AND tRate.Cost IS NOT NULL GROUP BY DC1.ID) AS DC2 INNER JOIN tDataCollection ON tDataCollection.ID = DC2.ID) AS DC3 ) AS DC4 WHERE tDataCollection.ID = DC4.ID