导出数据计算

时间:2017-07-08 03:26:44

标签: sql sql-server database

我希望使用派生数据来获得根据处理的约会计算的总薪水(每个20英镑),基本工资是1000英镑。此外,薪水应按月份和年份排序。

约会表具有约会日期和时间,工作表具有WorkerID和WorkerName,工资具有salaryID,约会处理和预约成本(20磅)。 我想根据每月1000英镑的基本工资和其他成本(预约处理* 20)按日期计算总工资。 我按日期订购有问题。

约会表

AppointmenID |AppointmentDate  | MechanicID
:----- | -----:     | :----:
AI1   | 2017-01-01  | MI1
AI2   | 2017-01-15  | MI2
AI3   | 2017-02-01  | MI1

薪资表

SalaryID | Salary  | AppointmentCost
:----- | -----:     | :----:
1      | 1000       | 20

约会表

AppointmenID |AppointmentDate  | MechanicID
:----- | -----:     | :----:
AI1   | 2017-01-01  | MI1
AI2   | 2017-01-15  | MI2
AI3   | 2017-02-01  | MI1
AI4   | 2017-01-25  | MI2

机械师表

MechanicID |MechanicName| SalaryID
:----- | -----:     | :----:
MI1   | Rooney      | 1
MI2   | Stephan     | 1
MI3   | Ronaldo     | 1

预期输出

1月的工资

AppointmentDate  | MechanicID | MechanicName | Salary| AppointmentCost| Appointment Handled | Salary
:----- |      -----: | :----:   | ----:| :----:|:--|:-----|
2017-01-01  | MI1    | Rooney   | 1000   | 20    |1  | 1020
2017-01-15  | MI2    | Stephan  | 1000   | 20    |2  | 1040

二月的工资

AppointmentDate  | MechanicID | MechanicName | Salary| AppointmentCost| Appointment Handled | Salary
:-----      | -----:     | :----:  |:----- | -----:| :----:  |:-----
2017-01-01  | MI1  |      Rooney   | MI1   | 1000  | 20      |1      | 1020

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

您需要Join's并使用以下表达式来计算机械师的工资

salary + ( count of appointmenthandled * appointmentcost )

像这样的东西

SELECT A.appointmentdate, 
       M.mechanicid, 
       M.mechanicname, 
       S.salary, 
       S.appointmentcost, 
       A.appointmenthandled, 
       salary = S.salary + ( A.appointmenthandled * S.appointmentcost ) 
FROM   mechanic M 
       INNER JOIN salary S 
               ON M.salaryid = S.salaryid 
       INNER JOIN (SELECT mechanicid, 
                          AppointmentHandled = Count(*), 
                          AppointmentDate =Min(appointmentdate) 
                   FROM   appointment A 
                   --Where month(AppointmentDate) = 1 
                   GROUP  BY mechanicid, 
                             Month(appointmentdate)) A 
               ON M.mechanicid = A.mechanicid