Позвольте мне описать проблему, с которой я сейчас сталкиваюсь.
У меня есть программное обеспечение, которое вычисляет налоговую форму с использованием процедуры магазина.
В каждой строке мы представляем налоговые значения для каждого сотрудника компании
Сама Процедура связана с формой, поэтому любой результат, который мы получаем от нее, направляется непосредственно в форму.
Обратите внимание: мне не разрешено изменять структуру таблицы результатов
Эта проблема присутствует в 3 последних столбцах таблицы (здесь упрощенно).
EmployeeID | Special Deduction | Deductions Sum | Income Tax
В настоящее время мне нужно было добавить несколько дополнительных сценариев для столбца «Специальные отчисления».
Хотя вычисления выполняются правильно, нагрузка настолько велика, что каждому сотруднику для расчета требуется около 10-15 секунд. Представьте себе компанию с несколькими сотрудниками, и вы получите точку ... Тайм-аут ...
Пытаясь его реорганизовать, я столкнулся с двумя большими проблемами.
ПРОБЛЕМА 1. - Для заполнения столбца Специальный вычет необходимо учитывать несколько сценариев с использованием CASE. Каждый случай выбирается исходя из суммы налога.
Налог, однако, является очень тяжелым SELECT с несколькими объединениями, но всегда одинаков для одного и того же сотрудника.
[Как можно рассчитать его один раз на Сотрудника, а затем использовать его в каждом предложении CASE? ]
ПРОБЛЕМА 2. - Сумма отчислений рассчитывается с добавлением некоторых других отчислений (например, социального страхования) плюс уже рассчитанный специальный отчисления.
То, что я сейчас делаю, снова рассчитывает для него весь Специальный налог.
Для того, чтобы затем рассчитать окончательный налог на прибыль, нам нужно снова рассчитать налог и вычесть сумму вычетов. Это означает, что нам нужно найти налог (он уже был найден несколько раз) (а также сумма специальных отчислений и отчислений
[Поскольку у нас уже есть все вышеуказанные данные в предыдущих столбцах, как я могу просто получить эти данные оттуда? ]
ПРИМЕЧАНИЕ. У всех столбцов также есть несколько SELECT, которые я не могу полностью стереть. Это означает, что, например, для налога на прибыль иметь SELECT (...) - [Сумма отчислений].
ПРИМЕЧАНИЕ 2. В настоящее время я пытаюсь переместить все в функции, чтобы хотя бы сделать код немного более читабельным, но я не уверен, окажет ли это какое-либо положительное влияние на производительность
ПРИМЕЧАНИЕ 3. Я не могу использовать курсоры, поскольку это полностью изменит структуру запроса ...
PS: Прошу прощения за объем текста, но я не вижу здесь большого количества примеров кода ...