2

I am trying to update a collection of records using a case statement but I get:

error: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM( SELECT SoftwareProjects.id, SoftwareProjects.Project_Code, Description' at line 8

here is my query:

UPDATE SoftwareProjects
SET BudgetStatus =
CASE
WHEN ((HoursBooked/HoursEstimated) * (100/1) < 80) THEN 1
WHEN ((HoursBooked/HoursEstimated) * (100/1) > 81 && (HoursBooked/HoursEstimated) * (100/1) < 100 ) THEN 2
ELSE   3
END
FROM
(SELECT SoftwareProjects.id, SoftwareProjects.Project_Code,  Description,
        BudgetStatus,  TimelineStatus,  QualityStatus,  OverallStatus,
        DeliveryDate,  HoursEstimated,  s4_project_id, 
        SUM( hours_adjusted ) AS HoursBooked
                        FROM SoftwareProjects
                        LEFT JOIN S4Admin.ts_entries ON s4_project_id = 
                        S4Admin.ts_entries.project
                        GROUP BY Description
                        ORDER BY  SoftwareProjects.Description)
Anthony Horne
  • 2,522
  • 2
  • 29
  • 51

1 Answers1

2

Try below

UPDATE SoftwareProjects a
  JOIN
  (SELECT SoftwareProjects.id, SoftwareProjects.Project_Code,  Description,  BudgetStatus,  TimelineStatus,  QualityStatus,  OverallStatus,  DeliveryDate,  HoursEstimated,  s4_project_id, SUM( hours_adjusted ) AS HoursBooked
                          FROM SoftwareProjects
                          LEFT JOIN S4Admin.ts_entries ON s4_project_id = 
                          S4Admin.ts_entries.project
                          GROUP BY Description
                          ORDER BY  SoftwareProjects.Description) b on a.id=b.id

SET a.BudgetStatus =
  CASE
  WHEN ((HoursBooked/b.HoursEstimated) * (100/1) < 80) THEN 1
  WHEN ((HoursBooked/b.HoursEstimated) * (100/1) > 81 && (HoursBooked/b.HoursEstimated) * (100/1) < 100 ) THEN 2
  ELSE   3
  END
Fahmi
  • 37,315
  • 5
  • 22
  • 31