2016-09-14 51 views
0

我希望我的描述足夠。我試圖刪除所有不重要的領域。MS Access SQL從不同的表中獲取結果並按日期排序

我有5個表(客戶,發票,項目,Invoice_Item,付款):

客戶字段和樣品日期是:

+----+------+ 
| ID | Name | 
+----+------+ 
| 1 | John | 
| 2 | Mary | 
+----+------+ 

發票字段和樣品日期是:

+----+-----------+----------+------+ 
| ID | Date | Customer | Tax | 
+----+-----------+----------+------+ 
| 1 | 1.1.2017 |  1 | 0.10 | 
| 2 | 2.1.2017 |  2 | 0.10 | 
| 3 | 3.1.2017 |  1 | 0.10 | 
| 4 | 3.1.2017 |  2 | 0.10 | 
| 5 | 8.1.2017 |  1 | 0.10 | 
| 6 | 11.1.2017 |  1 | 0.10 | 
| 7 | 12.1.2017 |  2 | 0.10 | 
| 8 | 13.1.2017 |  1 | 0.10 | 
+----+-----------+----------+------+ 

項目欄及樣品數據爲:

+----+--------+ 
| ID | Name | 
+----+--------+ 
| 1 | Door | 
| 2 | Window | 
| 3 | Table | 
| 4 | Chair | 
+----+--------+ 

Invoice_Item領域和樣本數據是:

+------------+---------+--------+------------+ 
| Invoice_ID | Item_ID | Amount | Unit_Price | 
+------------+---------+--------+------------+ 
|   1 |  1 |  4 |   10 | 
|   1 |  2 |  2 |   20 | 
|   1 |  3 |  1 |   30 | 
|   1 |  4 |  2 |   40 | 
|   2 |  1 |  1 |   10 | 
|   2 |  3 |  1 |   15 | 
|   2 |  4 |  2 |   12 | 
|   3 |  3 |  4 |   15 | 
|   4 |  1 |  1 |   10 | 
|   4 |  2 |  20 |   30 | 
|   4 |  3 |  15 |   30 | 
|   5 |  1 |  4 |   10 | 
|   5 |  2 |  2 |   20 | 
|   5 |  3 |  1 |   30 | 
|   5 |  4 |  2 |   40 | 
|   6 |  1 |  1 |   10 | 
|   6 |  3 |  1 |   15 | 
|   6 |  4 |  2 |   12 | 
|   7 |  3 |  4 |   15 | 
|   8 |  1 |  1 |   10 | 
|   8 |  2 |  20 |   30 | 
|   8 |  3 |  15 |   30 | 
+------------+---------+--------+------------+ 

原因價格表中未在項目表,是因爲它是客戶特定的價格。

支付領域是:

+----------+--------+-----------+ 
| Customer | Amount | Date | 
+----------+--------+-----------+ 
|  1 |  40 | 3.1.2017 | 
|  2 |  10 | 7.1.2017 | 
|  1 |  60 | 10.1.2017 | 
+----------+--------+-----------+ 

所以我的報告應結合所有表和按日期排序(無論是從發票或付款)爲一定的客戶。

因此對於例如客戶約翰(1)它應該是這樣的:

+------------+----------------+---------+-----------+ 
| Invoice_ID | Invoice_Amount | Payment | Date | 
+------------+----------------+---------+-----------+ 
| 1   | 171   | -  | 1.1.2017 | 
| 3   | 54    | -  | 3.1.2017 | 
| -   | -    | 40  | 3.1.2017 | 
| 5   | 171   | -  | 8.1.2017 | 
| -   | 10    | 60  | 10.1.2017 | 
| 6   | 44.1   | -  | 11.1.2017 | 
| 8   | 954   | -  | 13.1.2017 | 
+------------+----------------+---------+-----------+ 

它按日期排序,發票金額*(1-稅率)

我開始用((金額*單價)的總和)工會但後來迷路了。

這裏是我的嘗試:

SELECT Inv_ID as Num, SUM(Invoice_Items.II_Price*Invoice_Items.II_Amount) AS Amount, Inv_Date as Created 
FROM Invoice INNER JOIN Invoice_Items ON Invoice.Inv_ID = Invoice_Items.II_Inv_ID 
UNION ALL 
SELECT Null as Num, P_Value as Amount, P_Date as Created 
FROM Payments 
ORDER BY created ASC 

您的幫助表示讚賞!

感謝

回答

1

您可以生成您使用以下SQL腳本要求的報告:

SELECT CustomerID,Invoice_ID,Invoice_Amount,Payment,Date 

FROM (

SELECT c.ID AS CustomerID, i.ID AS Invoice_ID, SUM((t.Amount * t.UnitPrice)*(1-i.tax)) AS Invoice_Amount, NULL AS Payment,i.Date 
FROM (Customer c 
LEFT JOIN Invoice i 
ON c.ID = i.Customer) 
LEFT JOIN Invoice_Item t 
ON i.ID = t.Invoice_ID 
GROUP BY c.ID, i.ID,i.Date 

UNION 

SELECT c.ID AS CustomerID,NULL AS Invoice_ID, NULL AS Invoice_Amount, p.Amount AS Payment, p.Date 
FROM Customer c 
INNER JOIN Payment p 
ON c.ID = p.Customer) a 

ORDER BY CustomerID, Date, Payment ASC 

注:我已經添加到客戶ID的輸出,讓你知道什麼客戶數據對應。

+0

謝謝你,我覺得有兩個小失誤,稅i.tax不是T,並在第二個路口左轉joing應當i.iD = t.Invoice_ID,甚至當我糾正他們,我在查詢表達式'c.ID = i.Customer LEFT JOIN Invoice_Item t ON i.ID = t.Invoice_ID'「 – Augustus

+0

Opps,我做了更改。你能在這裏粘貼完整的錯誤信息嗎?請再次檢查列名的拼寫。 – Catzeye

+0

由於訪問不喜歡多個連接,因此向第一個查詢添加了括號。現在檢查。 – Catzeye

0

這裏是爲我工作的答案,有點從@Catzeye答覆糾正,沒有顯示聯盟的第二部分。

SELECT c.ID AS CustomerID,NULL AS Invoice_ID, NULL AS Invoice_Amount, p.Amount AS Payment, p.Date 
FROM Customer c 
INNER JOIN Payment p 
ON c.ID = p.Customer 

UNION ALL 

SELECT c.ID AS CustomerID, i.ID AS Invoice_ID, SUM((t.Amount * t.Unit_Price)*(1-i.tax)) AS Invoice_Amount, NULL AS Payment,i.Date 
FROM (Customer c 
INNER JOIN Invoice i 
ON c.ID = i.Customer) 
INNER JOIN Invoice_Item t 
ON i.ID = t.Invoice_ID 
GROUP BY c.ID, i.ID,i.Date 

ORDER BY CustomerID, Date, Payment;