SQL:使用另一个表中定义的变量填充表

时间:2012-12-27 23:06:28

标签: sql sqlite

我有Commissions_table,它存储我在Calls_table中列出的varibale的值。像这样

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

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

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

EmployeeID     TotalCommission 
John           28
Joe            5

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

1 个答案:

答案 0 :(得分:2)

好的我在SQL小提琴中工作过,所以你可以在那里测试解决方案:

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