2016-11-30 40 views
2

我有4個表....員工,客戶,訂單和Order_Info。我試圖內部加入4張表來總結訂單金額,並根據7%計算員工佣金。我非常接近解決這個問題,但我有一個小問題:我沒有得到所有員工,因爲我的Employees表中顯示的數量少於現有數量。這就是我現在有我的查詢寫: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 

我希望得到即使從NULLS計算佣金和銷售總額等於零,我相信所有的員工。

任何幫助改善我的查詢將不勝感激!

+2

嘗試使用LEFT JOIN而不是INNER JOIN。 – jarlh

+0

沒有工作,它給了我一個額外的行在每列填充NULL。甚至在lName和fName都爲空的情況下... – 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 JOIN到左,因爲像你說的員工的記錄應該是隻存在於JOIN Orders表,他們只可能沒有鏈接的訂單。

您可能還需要用ISNULL([field_name],0)包裝NULL priceEach,costEach,quantityOrdered和quantOrdered值以獲得沒有任何訂單的員工的正確結果。

+0

這給了我相同的結果 – finiteloop

+0

我將如何執行該Wrap? – finiteloop

+0

@finiteloop查看更新後的答案,我修改了連接到OrderDetails並添加了ISNULL包裝。 – andrews