Обновление с группой по статье в Mysql

0

У меня есть таблица Employee_Detail которая выглядит примерно так:

 ID| EMP_NO| EMP_NAME| YEARMONTH| CURR_MTH_PAY_AMT| TOTAL_CURR_MTH_PAY_AMT| CURR_MTH_DED_AMT| TOTAL_CURR_MTH_DED_AMT
  1| 1      | 'Alan'  | 201712   | 100             | NULL                  |  50             | NULL
  2| 1      | 'Alan'  | 201712   | 200             | NULL                  |  70             | NULL
  3| 1      | 'Alan'  | 201712   | 300             | NULL                  |  80             | NULL
  4| 1      | 'Alan'  | 201801   | 1000            | NULL                  | 500             | NULL
  5| 1      | 'Alan'  | 201801   | 2000            | NULL                  | 700             | NULL
  6| 1      | 'Alan'  | 201801   | 3000            | NULL                  | 800             | NULL
  7| 1      | 'Alan'  | 201801   | 4000            | NULL                  | 700             | NULL
  8| 2      | 'Bob'   | 201712   | 400             | NULL                  | 50              | NULL
  9| 2      | 'Bob'   | 201712   | 500             | NULL                  | 60              | NULL
 10| 2      | 'Bob'   | 201712   | 600             | NULL                  | 70              | NULL
 11| 2      | 'Bob'   | 201802   | 700             | NULL                  | 70              | NULL
 12| 2      | 'Bob'   | 201802   | 800             | NULL                  | 80              | NULL
 13| 2      | 'Bob'   | 201802   | 900             | NULL                  | 90              | NULL
 14| 2      | 'Bob'   | 201802   | 900             | NULL                  | 90              | NULL

Я пытаюсь обновить TOTAL_CURR_MTH_PAY_AMT as SUM(CURR_MTH_PAY_AMT) и TOTAL_CURR_MTH_DED_AMT as SUM(CURR_MTH_DED_AMT) для каждого сотрудника за каждый yearmonth, так что моя таблица выглядит примерно так.

ID| EMP_NO| EMP_NAME| YEARMONTH| CURR_MTH_PAY_AMT| TOTAL_CURR_MTH_PAY_AMT| CURR_MTH_DED_AMT| TOTAL_CURR_MTH_DED_AMT
  1| 1      | 'Alan'  | 201712   | 100             | 600                  |  50             | 200
  2| 1      | 'Alan'  | 201712   | 200             | 600                  |  70             | 200
  3| 1      | 'Alan'  | 201712   | 300             | 600                  |  80             | 200
  4| 1      | 'Alan'  | 201801   | 1000            |10000                 | 500             | 2700
  5| 1      | 'Alan'  | 201801   | 2000            |10000                 | 700             | 2700
  6| 1      | 'Alan'  | 201801   | 3000            |10000                 | 800             | 2700
  7| 1      | 'Alan'  | 201801   | 4000            |10000                 | 700             | 2700
  8| 2      | 'Bob'   | 201712   | 400             | 1500                 | 50              | 180
  9| 2      | 'Bob'   | 201712   | 500             | 1500                 | 60              | 180
 10| 2      | 'Bob'   | 201712   | 600             | 1500                 | 70              | 180
 11| 2      | 'Bob'   | 201802   | 700             | 3300                 | 70              | 330
 12| 2      | 'Bob'   | 201802   | 800             | 3300                 | 80              | 330
 13| 2      | 'Bob'   | 201802   | 900             | 3300                 | 90              | 330
 14| 2      | 'Bob'   | 201802   | 900             | 3300                 | 90              | 330

Я пробовал использовать этот запрос на Mysql

update Employee_Detail set TOTAL_CURR_MTH_PAY_AMT = SUM(CURR_MTH_PAY_AMT) , TOTAL_CURR_MTH_DED_AMT = SUM(CURR_MTH_DED_AMT)
group by YYYYMM, EMP_NO;

Но это дает мне эту ошибку

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 'group by YEARMONTH, EMP_NO'.

Я не могу использовать предложение group by с обновлением. Любая помощь приветствуется.

Теги:
sql-update
group-by

1 ответ

1
Лучший ответ

Вы не можете использовать group by для update, вместо этого вы можете попробовать следующее:

update Employee_Detail
join (
    select EMP_NO, YEARMONTH, sum(CURR_MTH_PAY_AMT) TOTAL_CURR_MTH_PAY_AMT, SUM(CURR_MTH_DED_AMT) TOTAL_CURR_MTH_DED_AMT
    from Employee_Detail
    group by EMP_NO, YEARMONTH
) t on Employee_Detail.EMP_NO = t.EMP_NO AND Employee_Detail.YEARMONTH = T.YEARMONTH
set Employee_Detail.TOTAL_CURR_MTH_PAY_AMT = t.TOTAL_CURR_MTH_PAY_AMT,
Employee_Detail.TOTAL_CURR_MTH_DED_AMT = t.TOTAL_CURR_MTH_DED_AMT

Подзапрос будет CURR_MTH_PAY_AMT общее количество CURR_MTH_PAY_AMT и общее количество CURR_MTH_DED_AMT для каждой группы, а затем join Employee_Detail для обновления каждой записи.

SQLFiddle DEMO здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню