babaiZhere Ответов: 1

Обновление и проверка одновременно


У меня есть таблица следующего вида

CatID| Total_Amount | Amount_paying |IsCompleted
-----|--------------|---------------|------------
CA01| 2000 | 1700 | 0

В этой таблице я должен проверить, совпадают ли Total_Amount и amount_paying или нет?
Где total_amount является фиксированной и amount_paying позволит вам максимизировать после каждого оператора Insert.

Так что если я вставлю запись
CatID| Total_Amount | Amount_paying |IsCompleted
-----|-------------- |------------ |------------
CA01| 2000 | 1700 | 0
CA01| 2000 | 300 | 1
Здесь я плачу 300 , так что Total_Amount = Amount_Paying и IsCompleted=1

UPDATE tbl
    		SET is_completed = CASE WHEN SUM(amount_paying) = Total_Amount THEN 1 ELSE 0 END
            WHERE tbl.branch_id =@branchid AND CatID=@catid


указание "агрегат может не отображаться в заданном списке оператора UPDATE".

Что я уже пробовал:

UPDATE tbl
SET is_completed = CASE WHEN SUM(amount_paying) = Total_Amount THEN 1 ELSE 0 END
WHERE tbl.branch_id =@branchid AND CatID=@catid

1 Ответов

Рейтинг:
2

Peter Leow

Всего один взгляд на вашу таблицу показывает некоторые фундаментальные проблемы с дизайном вашей базы данных:
1. Поле "Total_Amount" имеет повторяющиеся значения, например 2000. Если это поле зависит только от CatID, разве они не должны быть в отдельной таблице, скажем `tbl2`?
2. Как вы узнаете, какую строку `Is_Completed` вставить `1`, когда `Total_Amount` = `Amount_Paying`? Может быть, его тоже следует переместить в эту отдельную таблицу "tbl2".
3. Две таблицы `ТБЛ` и `tbl2` то можете связаться через поля catid.
Проверить это Введение в проектирование баз данных[^]