Шаг 26 - Автоматическое получение сумм в другую таблицу

Есть вообще некоторая классическая задача, суть которой в получении данных по таблице. Это может быть общая сумма товаров на складе, оборот по счету и так далее. Может возникнуть необходимость поддерживать эту таблицу всегда актуальной. То есть, чтобы всегда общие данные были готовы, либо производить подсчет по требованию. Суть реализации одна. Если актуальность сумм критический момент, то используются триггеры, если нет, то хранимые процедуры. Давайте попробуем на основе триггеров. Идея такая. У нас есть некоторая таблица стоимости и типов машин.

gif/26_1.gif (3613 b)

Здесь есть имя, цена и тип машины. Типа 1 - это грузовая, а 2 легковая. В итоге хотелось бы поддерживать актуальной таблицу с общей стоимостью по грузовым и легковым автомобилям.

gif/26_2.gif (1865 b)

Выход из такой ситуации можно найти на основе триггера. Создаем триггер как в "Шаг 13 - Триггеры". Ну и пишем код.

DECLARE @cars numeric(18,2)
SELECT @cars = (SELECT SUM(prise) FROM allcar WHERE type=1)
UPDATE prisecar SET CountProse=@cars WHERE TYPE=1
SELECT @cars = (SELECT SUM(prise) FROM allcar WHERE type=2)
UPDATE prisecar SET CountProse=@cars WHERE TYPE=2

Во-первых я определил переменную DECLARE, потом использовал агрегатную функцию SUM: "Шаг 25 - Агрегатная функция SUM". Эта сумма сохраняется в переменной. Дальше используется UPDATE для занесения данных, с условием. Подробнее о Update читайте "Шаг 14 - Ввод, удаление и изменение значений полей". Данная технология позволяет автоматизировать получение сумм по любой сложной системе или иерархии отчетности. Вопрос автоматом или по требованию зависит от производительности системы и реальной необходимости.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 19.09.2001