SQL-如何避免在case子句中进行多次计算? (我可以使用上一列中的值吗?)

时间:2019-06-20 16:45:40

标签: sql sql-server

让我描述一下我当前面临的问题。

我有使用“存储过程”计算税表的软件。 在每一行中,我们显示公司拥有的每个员工的税金值。 该过程本身已绑定到表单,因此无论我们从中获得什么结果,都直接进入该表单。

请注意:不允许更改结果表的结构

问题(在此为简化表)的最后3列中存在。

EmployeeID | Special Deduction | Deductions Sum | Income Tax

当前,我必须为“特殊扣除”列添加一些额外的方案。

尽管计算正确进行,但工作量如此之重,以至于每个员工大约需要10-15秒来进行计算。想象一家有多个员工的公司,您明白了...超时...

试图重构它,我遇到了两个大问题。

  

问题1.-要填充“特殊扣除”列,我们需要考虑使用CASE的多种情况。每个CASE都是根据一些税额选择的。

但是,税收是一项非常繁重的SELECT,具有多个联接,但对于同一名雇员而言始终是相同的。

[如何可能为每个Employee计算一次,然后在每个CASE子句中使用它? ]

  

问题2--扣除额的计算是加上其他一些扣除额(例如社会保险)加上已经计算出的特殊扣除额。

我现在正在做的是重新计算整个特别税。

对于要计算的最终所得税,我们需要再次计算税收并减去扣除额。意思是说我们需要找到税(到目前为止已经发现了好多次(以及特殊扣除额和扣除额之和

[既然我们在前面的列中已经包含所有上述数据,那么我如何简单地从那里检索这些数据? ]

注意:所有列也具有多个SELECT,我无法完全擦除。意思是例如所得税,请具有SELECT(...)-[扣除额]。

注2:我目前正在尝试将所有内容移入函数中,以至少使代码更具可读性,但是我不确定这是否会对性能产生积极影响

注3:我不能使用游标,因为这将完全改变查询的结构...

PS:很抱歉我的文字太多,但是我在这里看不到太多的代码示例...

0 个答案:

没有答案