2012-10-27 113 views
-1

我得到了銷售訂單和採購訂單表。SQL查詢從2個表中獲取總金額並按日期排序

銷售訂單

  • 日金額

  • 26/10 120

  • 26/10 130
  • 26/10 50
  • 27/10 50
  • 27/10 60

採購訂單

  • 日金額

  • 26/10 200

  • 26/10 300
  • 26/10 100
  • 27/10 100
  • 27/10 100

我想按日期顯示總銷售額和總購買額。

E.g.

  • 日期銷售總額合計採購
  • 26/10 300 600
  • 27/10 110 200

我的SQL查詢是這樣的,但它不工作。

$query = "Select o.date, o.Amount AS Sales, p.date, p.Amount AS Purchases 
      From customerorder o 
      right join Purchaseorder p on o.date = p.date 
      order by o.date"; 

請幫忙!謝謝!

+0

你還沒有加在一起的購買數量。總結他們。 – 2012-10-27 02:50:13

+0

@JackManey如果我這樣做:SELECT o.date,SUM(o.Amount)AS Sales,p.date,Sum(p.Amount)AS購買 FROM customerorder o RIGHT JOIN Purchaseorder p ON o.date = p。日期 ORDER BY o.date。它增加了一切。 – user1501784

回答

1
SELECT COALESCE(o.date, p.date) date, Sales, Purchases 
     FROM (SELECT date, SUM(amount) Sales FROM CustomerOrder GROUP BY date) o 
FULL JOIN (SELECT date, SUM(amount) Purchases FROM PurchaseOrder GROUP BY date) p 
     ON o.date = p.date 
    ORDER BY date 

MySQL不支持FULL JOIN,所以特地爲MySQL,你可以使用

SELECT o.date, Sales, Purchases 
     FROM (SELECT date, SUM(amount) Sales FROM CustomerOrder GROUP BY date) o 
LEFT JOIN (SELECT date, SUM(amount) Purchases FROM PurchaseOrder GROUP BY date) p 
     ON o.date = p.date 
UNION ALL 
    SELECT date, NULL, SUM(amount) Purchases 
     FROM PurchaseOrder p2 
    WHERE NOT EXISTS (SELECT * 
         FROM CustomerOrder o2 
         WHERE o2.date = p2.date) 
    GROUP BY date 
    ORDER BY date 
+0

o和p分組,爲什麼你需要再次分組? – xfx

+0

他們是子查詢。它們各自單獨運行,並被主要查詢視爲可僞造的。它們根本不影響主查詢。請注意,您也可以將您的銷售和採購字段「COALESCE」歸零。 –

0
select c.date,total_sales,total_purchase from 
(select date,sum(amount) total_sales from customerorder group by date) c 
join 
(select date,sum(amount) total_purchase from purchaseorder group by date) p 
on c.date=p.date 
order by c.date 

我不知道架構,所以U可以改變什麼 「加入」 到 「右連接」