0

Calls_table にリストした変数の値を格納する Commissions_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

TypeOfCall が DC である各従業員の CommissionType の合計を返し、値が ID ごとに異なるため、EmployeeID に従って Commission_table にリストされている値の CommissionType 列にリストされている変数を交換するクエリが必要です。同じ通話に対して 2 つの請求書が作成されることが多いため、通話番号も区別する必要がありますが、従業員には通話ごとに 1 つのコミッションしか支払われません。

したがって、望ましい結果は次のようになります。たとえば、Calls.CommissionType の変数は 182 番コールのジョーの MKM です。その従業員のコミッション テーブルにリストされている値と等しいセルを入力したいと考えています。MKM の joe の値はコミッション テーブルで 5 です。したがって、この例では、クエリで返されるコミッションの合計は 5 になります。 john の 3 番目の値は NC であり、DC のみが必要であるため、返されるクエリに 2 つの金額が追加されるため、john は 28 になります。したがって、返されるクエリは次のようになります。

EmployeeID     TotalCommission 
John           28
Joe            5

主キー (Calls.EmployeeID) を外部キー (Commissions.EmployeeID) にリンクすることを研究していましたが、呼び出しテーブルの変数をどのように置き換えるかについてまだ混乱しています。これが不可能な場合、誰かが私が同様の結果に達することができるアイデアを持っていますか?

4

1 に答える 1

2

OK、SQLフィドルでこれに取り組んだので、そこでソリューションをテストできます:

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

とにかく私はこれらの結果を得ます:

ジョー 5 ジョン 28

ケースを無視したので、John と john は同一人物です

インデントされたサブクエリは、commission_type に応じて合計する case ステートメントを使用します。次に、その合計を合計して、各従業員の合計コミッションを表示します。サブクエリを実行すると、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 に答える