2016-11-30 17 views
2

私は4つのテーブルを持っています....従業員、顧客、注文とOrder_Info。私は内側に4つのテーブルを結合して注文金額を合計し、従業員手数料を7%に基づいて計算しようとしています。私はこれを解決することに非常に近いですが、私は小さな問題が1つあります。従業員のテーブルに存在するものが少なくて済むので、私はすべての従業員を取得していません。これは私が現在、私のクエリが書かれている方法です:私は、私は信じている彼らの手数料と総売上ゼロは、NULLSから計算される場合でも、すべての従業員を取得したいSQLの4つのテーブル内の結合合計をピックアップヌルも?

SELECT Employees.lName, Employees.fName, 
     SUM(quantOrdered * costEach) AS ttl_orders_value, 
     (SUM(quantOrdered * costEach) * .07) AS Commission 
FROM Customers 
INNER JOIN Employees ON Customers.empNumber = Employees.empNumber 
INNER JOIN Orders ON Customers.custNumber = Orders.custNumber 
INNER JOIN Order_Info ON Orders.ordNumber = Order_Info.ordNumber 
GROUP BY Employees.lName, Employees.fName 
ORDER BY Employees.lName, Employees.fName 

私の質問を改善する助けがあれば、幸いです!

+2

INNER JOINではなくLEFT JOINを試してください。 – jarlh

+0

それは私に各列にNULLで移入された余分な行を与えてくれませんでした。 lNameとfNameがNULLの場合でもnullです。 – finiteloop

+0

サンプルテーブルのデータと現在の結果と期待される結果をすべて書式付きテキストとして追加します。 – jarlh

答えて

2

はこの試してみてください。

SELECT Employees.lName, Employees.fName, 
     SUM(ISNULL(quantityOrdered,0) * ISNULL(priceEach,0)) AS ttl_orders_value, 
     (SUM(ISNULL(quantOrdered,0) * ISNULL(costEach,0)) * .05) AS Commission 
FROM Employees 
LEFT JOIN Customers ON Customers.empNumber = Employees.empNumber 
LEFT JOIN Orders 
    INNER JOIN OrderDetails ON Orders.ordNumber = OrderDetails.ordNumber 
ON Customers.custNumber = Orders.custNumber 
WHERE Employees.workTitle = 'Developer' 
GROUP BY Employees.lName, Employees.fName 
ORDER BY Employees.lName, Employees.fName 

注意を、私はINNERを変更したLEFTに登録しようあなたは従業員のレコードが存在する必要があります言うように、彼らは唯一の注文をリンクされていない可能性がありますので、Ordersテーブルのためにのみ登録しよう。

また、注文していない従業員に適切な結果を得るには、NULL priceEach、costEach、quantityOrderedおよびquantOrderedの値をISNULL([field_name]、0)で囲む必要があります。

+0

それは私に同じ結果を与えた – finiteloop

+0

どのように私はそのラップを実行するだろうか? – finiteloop

+0

@finiteloop更新された答えを見て、私はOrderDetailsへの結合を変更し、ISNULLラッパーも追加しました。 – andrews

関連する問題