Помощь в создании запросов и вычислений

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
николайЩ
Сообщения: 3
Зарегистрирован: 03 май 2005, 11:49

Добрый день !
Будте добры подскажите пожалуйста как составить (хотя бы примерно)
алгоритм, казалось бы простой задачи:
Есть таблица в которой представленны поля:[ID,Ф.И.О.,Оклад,Сумма,Коэффициент,Процентыплюс,Процентыминус,Конечный расчет]
(поля называю в упрощенном виде для большей наглядности), суть задачи
состоит в том что бы при проставлении в поле Процентыплюс какой либо суммы, поле
Оклад увеличиволась на величину введенных процентов у конкретного человека Оклад:=(Оклад*Процентыплюс)/100)+Оклад,
а у остальных уменьшалась на дельту которая равна Оклад:=(SUM(((Оклад*Процентыплюс)/100)))/Table.RecordCount)
или соответственно увеличиволась если заполняется поле Процентыминус тогда Оклад:=Оклад-(Оклад*Процентыплюс)/100)
Оклад:=(SUM(((Оклад*Процентыминус)/100)))/Table.RecordCount)
Итак для получения конечного результата надо Конечный расчет:=Оклад*Коэффициент*Сумма
Все казалось бы просто если бы не но: Во превых за один проход просчитать не удается, нужны промежуточные результаты
для расчета дельты, во вторых нужны доп.поля для подсчета тех у кого плюс к окладу а у кого минус и т.д.и т.п.

Я примерно считаю так используя Query.SQL:

1.Расчет суммы процентов+оклада или оклада-проценты для конкретного человека,
нахождение сумм процентов для дельты, создание промежуточной базы (с использованием DbiMakePermanent)
Query1.dbf.
2.Расчет из промежуточной базы Query1.dbf общей суммы дельты плюс или минус (что бы потом прибавить или отнять из Оклада)
создание промежуточной базы Query2.dbf с этими полями

3.И на конец отнимаю из поля (Оклад+Процентыплюс) дельту плюс или прибавляю (Оклад-Процентыминус) дельту минус

После всех этих манипуляци происходит куча неудобств,создается масса не нужных полей у кого есть Оклад+Процентыплюс,
у кого есть Оклад-Процентыминус, у кого вообще только Оклад-дельта или соответсвенно Оклад+дельта, как это все
слить в одно поле не понятно....?????
Excel из которого вообщем то взялась эта белиберда делает это элементарно с помощью
встроенных вычислений %-ов, а я что то "закопался".
Может быть кто нибудь подскажет какой то элегантный алгоритм без лишних наворотов!!!!!!

Заранее спасибо.
Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Многословен ты однако :)
Делаешь так: оклад оставляешь впокое. Проценты делаешь со знаком и одну колонку.
Когда меняешь проценты у одного

Код: Выделить всё

update ... percent = percent + @value ... where id = @some_id
, то тут же делаешь update для других, но с обратным знаком:

Код: Выделить всё

update ... percent = percent - (@value/@rowcount) ... where id <> @some_id
И в конце вы водишь результаты

Код: Выделить всё

select *, wage + wage*percent/100  as salary from...
А ещё лучше проценты хранить дробными числами. Т.е. не 10%, а 0.1.

В результате не нужно мучаться со знаком - если у кого-то вычитается процент (т.е. добавляется отрицательное число), значит другим добавится (минус на минус - даёт плюс :) ).
Даже самый дурацкий замысел можно воплотить мастерски
diashi
Сообщения: 7
Зарегистрирован: 23 май 2005, 23:02

А база то какая ? Если есть возможность то лучше решить с помощью хранимой процедуры (SQL SERVER на пример)
Ответить