0

我有 Commissions_table 存储我在 Calls_table 中列出的变量的值。像这样

EmployeeID      MKM    TKM    LO    
Joe             5      10     15 
John            7      14     21

我需要能够获得 Calls_table 中列的总和,但将变量替换为存储在 Commissions_table 中的金额

EmployeeID     CommissionType  TypeOfCall  Call#
Joe               MKM            DC          182
Joe               MKM            DC          182
john              TKM            DC          150
John              TKM            DC          160
john              LO             NC          180

我需要查询返回每个员工的 CommissionType 总和,其中 TypeOfCall 为 DC,并根据 EmployeeID 将 CommissionType 列中列出的变量换成 Commission_table 中列出的值,因为每个 ID 的值不同。它还需要对 Call# 进行区分,因为通常会为同一个电话编写两张发票,但每次电话只向员工支付一笔佣金。

所以期望的结果是这样的,Calls.CommissionType 中的变量是 MKM,例如 joe on call 182,我想填充一个等于该员工佣金表中列出的任何值的单元格。MKM 中 joe 的值在佣金表中为 5,因此对于该示例,查询返回的总佣金将为 5,因为 Call# 将是 dinstinct,并且只会返回一个佣金金额,并且返回的金额为john 将是 28,因为在返回的查询中将添加两个数量,因为为 john 列出的第三个是 NC,并且只需要 DC。所以返回的查询看起来像:

EmployeeID     TotalCommission 
John           28
Joe            5

我正在研究将主键(Calls.EmployeeID)与外键(Commissions.EmployeeID)联系起来,但仍然对如何替换调用表中的变量感到困惑。如果这是不可能的,有没有人有任何想法可以达到类似的结果?

4

1 回答 1

2

好的,我在 SQL fiddle 中对此进行了研究,因此您可以在那里测试解决方案:

http://sqlfiddle.com/#!3/3b815/12/0

无论如何我得到这些结果:

乔 5 约翰 28

我忽略了大小写,所以约翰和约翰都是同一个人

缩进的子查询使用 case 语句来求和,具体取决于 Commission_type 是什么。然后我将总数相加,以便显示每个员工的总佣金。如果您运行子查询,您将看到它使用 distinct 子句来处理多个发票。

SELECT 
EmployeeID,
SUM(CommissionTotal) AS CommissionTotal
FROM 
    (SELECT DISTINCT
    Calls.Call#,
    Calls.EmployeeID,
    Calls.CommissionType,
    Calls.TypeOfCall,
    CASE 
    WHEN Calls.CommissionType = 'MKM' THEN SUM(Commissions.MKM)
    WHEN Calls.CommissionType = 'TKM' THEN SUM(Commissions.TKM) 
    WHEN Calls.CommissionType = 'LO' THEN SUM(Commissions.LO)
    END AS CommissionTotal
    FROM Calls
    LEFT JOIN Commissions 
    ON Calls.EmployeeID=Commissions.EmployeeID
    WHERE TypeOfCall = 'DC'
    GROUP BY Calls.Call#,
    Calls.EmployeeID, 
    Calls.CommissionType,
    Calls.TypeOfCall) a
GROUP BY 
EmployeeID
于 2012-12-28T02:11:09.497 回答