【发布时间】:2011-03-23 15:10:29
【问题描述】:
我在存储过程方面的经验有限,我希望这能解决我的工资单问题。此外,对于我试图完成的存储过程可能不是最好的答案。
我正在尝试一个工资核算函数,其中存储过程的目标是获取给定工资核算周期的数据,对第一个返回的员工进行数学运算,输出计算结果,然后转到下一个。让我再解释一下……
基于提供给存储过程的支付周期 ID,我希望它执行以下操作:
选择该期间的员工,添加他的总工作时间,然后添加员工的总佣金,以较大者为准 - 返回该值(连同总数 - 例如总小时数和总佣金) - 然后转移到下一位员工,直到完成。
数据排列如下:
工资周期表 PayrollID、DateBegin、DateEnd 存储过程一开始就给出了工资单 ID(作为 QueryString),所以我必须获取相应的 DateBegin 和 DateEnd 数据,并从 EmployeeTimeTable 中获取 DateTimeIn 和 DateTimeOut 以获取适当的出勤记录。
PayrollID - 支付周期的 ID。
DateBegin - 支付期的开始日期。
DateEnd - 支付周期的结束日期。
员工时间表 EmployeeID、DateTimeIn、DateTimeOut、HourlyRate、CalculatedHours、AmountPaid - 每天工作都有一个实例,因此存储过程将计算当天的工作时间。
EmployeeID - 与此相关的记录的员工 ID。
DateTimeIn - 员工打卡的日期和时间。
DateTimeOut - 员工打卡的日期和时间。
HourlyRate - 员工每小时支付的货币费率。
CalculatedHours - 为此记录工作的小时数。
AmountPaid - 只需 HourlyRate x CalculatedHours。
佣金表 EmployeeID、PayrollID、AmountPaid - 每笔销售赚取的“佣金”都有记录。
EmployeeID - 与此相关的记录的员工 ID。
PayrollID - 支付周期的 ID。
AmountPaid - 为此记录赚取的佣金金额。
所以我的问题是 - 我如何能够创建所描述的功能?甚至可能吗?这需要奇迹来完成吗!?或者我有更好的方法来解决这个问题吗?
此外,理论上这最终会输出到 WebForm GridView。
【问题讨论】:
-
SQL 的乐趣(一旦你习惯了它)就在于你指定你想要达到的结果,而不是你想如何达到它们。您无需编写一系列步骤,而是根据输入定义所需的输出集。不过,我们还没有足够的信息来回答这个问题——佣金表中也有日期吗?另外 AmountPaid 和 TotalHoursWorked 通常是两个不同的概念,那么我们如何比较它们以确定最大的呢?如果您可以发布实际的表定义和一些示例数据(和预期结果),那将非常有帮助。
-
优点 - 让我更新我的帖子以澄清。
-
我已经更新了我原来的帖子。佣金表中没有日期,它通过 ID 与保存日期的 PayrollTable 相关联。我们通常支付佣金的方式是基于基础与佣金的时间表:如果您的基础(支付期间的每小时总金额)高于您的佣金总额(给定支付期间的所有佣金加起来),那么您会得到报酬你的基地。反之亦然,如果您的佣金更高,您将获得佣金。
-
看起来你需要一个 temptable 和一个 cursor 在你的 proc 中。在您的光标中,您将进行所有计算,然后将它们添加到您的临时表中,然后对光标中的下一个员工也是如此。最后,归还你的诱惑
-
他们是否获得部分工作时间的报酬?还是我们总是四舍五入(向上/向下)?
标签: sql vb.net stored-procedures