查询篇-按收取学费的比例给老师发工资

2013年07月30日 09:03
点击率:10559
之前的文章讲过老师薪金计算的三种基本方法:http://www.mtcnsoft.com/docshow_c21_158.aspx

其中第三种“按上课学员实际消耗的课时产出计算老师提成。”精度非常高,消耗资源大,并且要特殊配置。今天我们讲的也是第三种,但是参数选择不同所以实现起来比较简单。单价参考的是学员最后一次交费时的课时单价,可以满足大部分学校的需求。


主查询:

Select
LessonDegree.TeacherID as 工号,
Users.TrueName as 姓名,
sum(Attend.Lessons * (BillItem.UnitPrice + BillItem.Favorable / BillItem.Amount)) as 金额,
sum(Attend.Lessons * (BillItem.UnitPrice + BillItem.Favorable / BillItem.Amount)) * 0.2 as 提成金额,
LessonDegree.TeacherID as ShowKey
from Attend,LessonDegree,StuClass,BillItem,Users
where
Attend.LessonDegreeID = LessonDegree.LessonDegreeID
and Attend.StuClassID = StuClass.StuClassID
and StuClass.LastBillItemID = BillItem.BillItemID
and LessonDegree.TeacherID = Users.UserID
and LessonDegree.StartDate >= {@StartDate:开始日期}
and LessonDegree.StartDate <= {@EndDate:结束日期}
group by LessonDegree.TeacherID,Users.TrueName


子查询:

Select
StuClass.StudentID as 学号,
StuClass.StudentName as 姓名,
StuClass.ClassID as 班号,
StuClass.ClassName as 班名,
Attend.Lessons as 课时,
BillItem.UnitPrice as 单价,
LessonDegree.StartDate as 日期
from Attend,LessonDegree,StuClass,BillItem
where
Attend.LessonDegreeID = LessonDegree.LessonDegreeID
and Attend.StuClassID = StuClass.StuClassID
and StuClass.LastBillItemID = BillItem.BillItemID
and Attend.Lessons > 0
and LessonDegree.StartDate >= {@StartDate}
and LessonDegree.StartDate <= {@EndDate}
and LessonDegree.TeacherID = {@ShowKey}



统计某段时间学员所上课时的价值有一定的难度,因为优惠的客观存在,并且某段时间内存在学员多次购买课时、并且单价不同的问题。上面这段代码选择的是学员最后一次购买课时的单价做为标准进行构造的,StuClass.LastBillItemID = BillItem.BillItemID 从这句条件语法可以看出来。

(BillItem.UnitPrice + BillItem.Favorable / BillItem.Amount)这段代码用于计算课时实际单价(去除优惠后),因为优惠金额在系统里一直使用负数表达,所以这里用原单价+优惠单价=实际单价。


sum(Attend.Lessons * (BillItem.UnitPrice + BillItem.Favorable / BillItem.Amount))这段代码表示学员上课课时数 X 最后一次购买课时的单价 = 实际课时产值。

sum(Attend.Lessons * (BillItem.UnitPrice + BillItem.Favorable / BillItem.Amount)) * 0.2 as 提成金额,这段代码表示课时产出的20%用于老师的提成。根据学校的实际情况修改这里的0.2来调节提成比例。



(把以上代码粘贴到《麦田培训学校管理软件》查询管理里,可直接使用)