2016-09-14 7 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 | 
+----------+--------+-----------+ 

ので、私のレポートは、特定の顧客のために(いずれかの請求書や支払から)DATEですべてのテーブルとソートを組み合わせなければなりません。

です。顧客のためのように、ジョンは(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 

注意:あなたはデータが対応するどのような顧客を知っているので、私は出力に得意先を追加しました。

+0

私は、税はi.taxをtではない、第二に、それは私がそれらを修正しても、i.iD = t.Invoice_IDあるべきjoing左、私は2つの小さなミスがあると思います、ありがとうエラーを取得します。 "クエリエラーの構文エラー(演算子がありません)" c.ID = i.Customer LEFT JOIN Invoice_Item t ON i.ID = t.Invoice_ID '" – Augustus

+0

Opps、私は変更を加えました。ここに完全なエラーメッセージを貼り付けることができますか?また、列名のスペルを再度確認してください。 – Catzeye

+0

アクセスが複数の結合を好きではないため、最初のクエリにかっこを追加しました。今すぐチェックしてください。 – Catzeye

0

ここでは、私のために働いてくれた回答です.Catzeye Answerから少し修正されました。これは、連合の第2部を示していませんでした。

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; 
関連する問題