2016-10-25 17 views
0

問題は2つのテーブルがあり、計算した総収入を計算する必要がありますが、条件を適用する方法を理解できません。下の私の試み。ありがとう!私は最初の計算をしたいSQLで条件付き乗算を行う方法

SELECT (SUM(i.ItemCost) + 
     SUM(i.ItemCost * (CASE WHEN j.WorkFlowsStatus = 'Closed' THEN j.MarginPercentage ELSE 0 END)) 
     ) 
FROM Jobs j INNER JOIN 
    Items i 
    ON j.JobNumber = i.JobNumber INNER JOIN 
    Customers as c 
    ON j.CustomerID = c.CustomerID 
WHERE c.CustomerID = '1235735' 
GROUP BY c.CustomerName; 
+0

あなたは式を提供することができます – Beginner

答えて

1

、その後、値上で合計を実行します。

SELECT 
      (((SUM(i.ItemCost)) + ((SUM(i.ItemCost)) * j.MarginPercentage)) WHERE j.WorkFlowsStatus = 'Closed') 
FROM Jobs AS j 
INNER JOIN Items AS i 
     ON j.JobNumber = i.JobNumber 
INNER JOIN Customers as c 
     ON j.CustomerID = c.CustomerID 
    WHERE c.CustomerID = '1235735' 
    GROUP BY c.CustomerName; 
+0

タンクはジェイソン、それは完璧に働いた! – MrG

0

私はあなたがこのような何かをしたいと思います。合計のないクエリでは、各行の詳細が表示され、グループ化を取り出すだけで各行に追加する値の詳細が表示されます。

SELECT 
    SUM(CASE 
      WHEN j.WorkFlowsStatus = 'Closed' THEN i.ItemCost * j.MarginPercentage + i.ItemCost 
      ELSE i.ItemCost 
     END) 
FROM Jobs AS j 
    INNER JOIN Items AS i ON j.JobNumber = i.JobNumber 
    INNER JOIN Customers as c ON j.CustomerID = c.CustomerID 
WHERE c.CustomerID = '1235735' 

あなたが考える値を取得する場合は、ちょうどSUM()を取り出し、去るCASEをし、「*」を追加し、間違っていると、あなたはすべての詳細レコードを表示して間違って起こっているかを把握することができます。

すべてのエントリに対して合計を実行するだけでは、でグループを作成する必要はありません。グループを使用する場合は、集計関数に含まれていないフィールドはすべてグループ別に指定する必要があります。あなたが特定のCustomerIDを照会しているので、あなたは何を得ているべきかを知っています。あなたがそれをやっていないのであれば、顧客名によるグループ分けは危険で、2つの顧客列が同じ名前を持つとどうなるか考えてみてください。