2014-01-28 40 views
1

以下代碼顯示自我們的數據庫創建以來已購買的所有客戶以及他們花了多少錢。有幾個客戶在我們實現新數據庫後還沒有購買,但是當我運行這些代碼時,他們並沒有出現。我在這個網站上看過類似的例子,但解決方案對我來說太複雜了。 還有一張客戶表,顯示我們所有'n'客戶的結果,該表通過customerID連接到訂單表。不知道這是否有幫助。行收入= 0,如何顯示0?

select t3.CustomerID, sum(Revenue) as Revenue 
from 
(
select orderid, sum(UnitPrice*quantity) as Revenue from [Order Details] 
group by OrderID 
)t1 
inner join 
(
select customerid,orderid from orders 
)t3 
on t1.orderid=t3.orderid 
group by t3.CustomerID 
+0

你想要一個'OUTER JOIN',而不是'INNER JOIN'。查看http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-join – ThisSuitIsBlackNot

回答

1

我覺得你只是想這個相當簡單的查詢:

select c.CustomerID, sum(od.UnitPrice * od.quantity) as Revenue 
    from customers c left outer join 
     orders o 
     on o.CustomerId = c.CustomerId left outer join 
     `Order Details` od 
     on od.OrderId = o.OrderId 
    group by c.CustomerID; 
+0

的確,我在這裏添加了一個[SQLFiddle](http://sqlfiddle.com/#!2/fc941/3/0),如果你有興趣玩這個查詢。 –

+1

@SimonKrenger。 。 。這裏是一個稍微修改的SQL小提琴(http://sqlfiddle.com/#!2/976e4/2),其中包含來自OP的不愉快表名('Order Details'而不是'order_details')。 –