SQL - Как избежать нескольких вычислений в кейсе? (Могу ли я использовать значение из предыдущего столбца?) - PullRequest
0 голосов
/ 20 июня 2019

Позвольте мне описать проблему, с которой я сейчас сталкиваюсь.

У меня есть программное обеспечение, которое вычисляет налоговую форму с использованием процедуры магазина. В каждой строке мы представляем налоговые значения для каждого сотрудника компании Сама Процедура связана с формой, поэтому любой результат, который мы получаем от нее, направляется непосредственно в форму.

Обратите внимание: мне не разрешено изменять структуру таблицы результатов

Эта проблема присутствует в 3 последних столбцах таблицы (здесь упрощенно).

EmployeeID | Special Deduction | Deductions Sum | Income Tax

В настоящее время мне нужно было добавить несколько дополнительных сценариев для столбца «Специальные отчисления».

Хотя вычисления выполняются правильно, нагрузка настолько велика, что каждому сотруднику для расчета требуется около 10-15 секунд. Представьте себе компанию с несколькими сотрудниками, и вы получите точку ... Тайм-аут ...

Пытаясь его реорганизовать, я столкнулся с двумя большими проблемами.

ПРОБЛЕМА 1. - Для заполнения столбца Специальный вычет необходимо учитывать несколько сценариев с использованием CASE. Каждый случай выбирается исходя из суммы налога.

Налог, однако, является очень тяжелым SELECT с несколькими объединениями, но всегда одинаков для одного и того же сотрудника.

[Как можно рассчитать его один раз на Сотрудника, а затем использовать его в каждом предложении CASE? ]

ПРОБЛЕМА 2. - Сумма отчислений рассчитывается с добавлением некоторых других отчислений (например, социального страхования) плюс уже рассчитанный специальный отчисления.

То, что я сейчас делаю, снова рассчитывает для него весь Специальный налог.

Для того, чтобы затем рассчитать окончательный налог на прибыль, нам нужно снова рассчитать налог и вычесть сумму вычетов. Это означает, что нам нужно найти налог (он уже был найден несколько раз) (а также сумма специальных отчислений и отчислений

[Поскольку у нас уже есть все вышеуказанные данные в предыдущих столбцах, как я могу просто получить эти данные оттуда? ]

ПРИМЕЧАНИЕ. У всех столбцов также есть несколько SELECT, которые я не могу полностью стереть. Это означает, что, например, для налога на прибыль иметь SELECT (...) - [Сумма отчислений].

ПРИМЕЧАНИЕ 2. В настоящее время я пытаюсь переместить все в функции, чтобы хотя бы сделать код немного более читабельным, но я не уверен, окажет ли это какое-либо положительное влияние на производительность

ПРИМЕЧАНИЕ 3. Я не могу использовать курсоры, поскольку это полностью изменит структуру запроса ...

PS: Прошу прощения за объем текста, но я не вижу здесь большого количества примеров кода ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...