2014-12-07 53 views
1

我試圖弄清楚如何用適當的SQL語句解決這個問題: 「向客戶至少發出三份訂單的城市中的所有客戶銷售了多少,結果應顯示城市名稱和這些客戶的總訂單數量「。如何連接三個表,其中一個表與另外兩個表的ID不匹配?

問題是我有三個表可以使用:Order1,Order2和Customers。這些表的結構是這樣的:

Order1 has the attributes: Ordernr, CustomerNr. 
Order2 has the attributes: Ordernr, Order quantity. 
Customers has the attributes: CustomerNr, Customer name, City name. 

有了這個代碼,我可以加入三個表,以便能夠顯示訂單數量從每個城市每一位客戶。但是,如何在至少有三個訂單的城市中顯示訂單數量?

SELECT Customers.CustomerNr, CityName, Order2.OrderQuantity 
FROM Order1 INNER JOIN Order2 
    ON Order1.ordernr = Order2.ordernr JOIN Customers 
    ON Customers.CustomerNr = Order1.CustomerNr 

回答

0

試試這個:

SELECT c.CityName, SUM(o2.OrderQuantity) OrderQuantity 
FROM Order1 o1 
INNER JOIN (SELECT o1.CustomerNr 
      FROM Order1 o1 
      GROUP BY o1.CustomerNr 
      HAVING COUNT(o1.Ordernr) >= 3 
      ) AS a ON o1.CustomerNr = a.CustomerNr 
INNER JOIN Order2 o2 ON o1.Ordernr = o2.Ordernr 
INNER JOIN Customers c ON o1.CustomerNr = c.CustomerNr 
GROUP BY c.CityName 
+0

這似乎是一個更準確的解決方案,謝謝! – eqinna 2014-12-08 17:58:38

0

這個查詢將返回城市的列表有至少3個數量級:

select CityName 
    from Customers c 
     join Order1 o1 on c.CustomerNr = o1.CustomerNr 
     join Order2 o2 on o1.OrderNr = o2.OrderNr 
group by c.CityName having Sum(o2.OrderQuantity) > 3 

現在你想從這些城市從客戶的所有訂單(我從表Order1假設)

select o1.* 
    from Order1 o1 joib Customer c on c.CustomerNr = o.CustomerNr 
where c.CityName in (
    select CityName 
    from Customers c 
     join Order1 o1 on c.CustomerNr = o1.CustomerNr 
     join Order2 o2 on o1.OrderNr = o2.OrderNr 
group by c.CityName having Sum(o2.OrderQuantity) > 3 
) 

希望這會有所幫助

+0

我不遵循「c」,「o1」和「o2」的含義嗎? – eqinna 2014-12-07 20:27:29

+0

我的意思是,我只想顯示客戶至少已完成三筆訂單的城市的行,並且我希望向結果(輸出視圖)中添加一列,名爲AS'總數量' )總訂單數量,您可以從Order2表中的「Orderquantity」列中獲得。換句話說,我希望結果顯示在兩列中:城市名稱(至少有3個訂單的客戶的城市)以及名爲「總量」的列,以列出這些訂單的總數量客戶已經做出。 – eqinna 2014-12-07 20:55:31

+0

c,o1和o2被稱爲「別名」。您尚未說明'orderQuantity'的含義。我認爲這是指訂單數量,但似乎它指的是訂購數量。 – alzaimar 2014-12-09 06:28:17

相關問題