ОБНОВЛЕНИЕ записей из SELECT с использованием оператора case.(MySQL) - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь обновить коллекцию записей, используя оператор case, но получаю:

error: # 1064 - у вас ошибка в синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'FROM (SELECT SoftwareProjects.id, SoftwareProjects.Project_Code, Description' в строке 8

. Вот мой запрос:

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)

1 Ответ

0 голосов
/ 12 октября 2018

Попробуйте ниже

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
...