0

我有 3 个表,如下所述

MonthlyOrder 表 4 列 CustomerID DateID(以整数表示,并作为月份的第一天 = 20121201) OrderCount - INT

HoursSpend Tbale 有 4 列 CustomerID DateID 函数 - VARCHAR() -- 函数是 Reporting、Admin 和 Sales call Hours - INTEGER -- 每个月花费在每个函数上的小时数

Rates 表有 3 列 CustomerID AccountRate -- Money (如果 NULL 则默认为 $50) OperationRates - Money

我需要从这个表中实现的计算是 (LoadCount*AccountRate) + ((HoursSpend 表中的报告函数小时数 + Amin 的小时数 + 销售电话的小时数) * Rates表中的 OperationRates)

请告知实现此计算的最佳方法 MonthlyOrder
CustomerID DateID OrderCount
1 20121201 20
1 20121202 10
2 20121210 100
HoursSpend
CustomerID DateID Function Hours
1 20121201 Reporting 2
1 20121201 Admin 3
1 20121201 Sales Calls 5
1 1
Rates
Customer AccountRID2 5 1
1客户帐户RID201 18 美元 50 美元

计算- > (OrderCount*AccountRate) + ((Reporting Hours + Admin Hours + Sales Calls Hours) * OperationRates)
customerID 1 on 20121201 的示例-> (20*18) + ((2+3+5) * 50) = 860 美元
** 请注意,培训时间不包括在内,因为我关心的唯一时间是报告 + 管理员 + 销售电话

4

1 回答 1

0

假设以下列组合是唯一的:MonthlyOrder[CustomerID,DateID], HoursSpend[CustomerID,DateID,Function], Rates[CustomerID] 你可以使用类似的东西:

select mo.CustomerID, mo.DateID, mo.OrderCount*max(AccountRate) +
        (sum(rep.hours)+sum(adm.hours)+sum(sc.hours))*max(rt.OperationRates)
from MonthlyOrder as mo
  join Rates as rt                on rt.CustomerID = mo.CustomerID
  left join HoursSpend as rep     on rep.CustomerID = mo.CustomerID and
                                     rep.DateId = mo.DateId and
                                     rep.Function = 'Reporting'
  left join HoursSpend as adm     on adm.CustomerID = mo.CustomerID and
                                     adm.DateId = mo.DateId and
                                     adm.Function = 'Admin'
  left join HoursSpend as sc      on sc.CustomerID = mo.CustomerID and
                                     sc.DateId = mo.DateId and
                                     sc.Function = 'Sales Calls'
group by mo.CustomerID, mo.DateID, mo.OrderCount
于 2012-12-18T20:37:52.977 回答