2017-09-14 4 views
0

特定のケースでgroup by節を理解しようとしています。それぞれの請求書に同じ金額のテーブルを2つ追加しました。矛盾がないことを確認するクエリを作成します。ここでは、テーブル、クエリと結果である:グループ別と合計のデータがありません

Table A: 
Order_Number | Order_Number_Line | Amount 
1   | 1     | 80 
1   | 2     | 20 
1   | 3     | 30 
1   | 4     | 70 

Table B 

Order_Number | Order_Number_Line | Invoice_ID | Invoice_Line_Number | Amount 
1   | 1     | 1234  | 1     | 20 
1   | 2     | 1234  | 2     | 5 
1   | 3     | 1234  | 3     | 10 
1   | 4     | 1234  | 4     | 25 
1   | 1     | 1234  | 1     | 35 
1   | 2     | 1234  | 2     | 7 
1   | 3     | 1234  | 3     | 15 
1   | 4     | 1234  | 4     | 10 
1   | 1     | 1234  | 1     | 25 
1   | 2     | 1234  | 2     | 8 
1   | 3     | 1234  | 3     | 5 
1   | 4     | 1234  | 4     | 35 

Select A.Order_Number, A.Amount, B.Amount 
From Table_A as A 
Left Join (Select Order_Number, Amount From Table_B) as B 
On A.Order_Number = B.Order_Number 

Order_Number | Amount_Table_A | Amount_Table_B 
01   | 80    | 20    
01   | 80    | 5    
01   | 80    | 10    
01   | 80    | 25    
01   | 80    | 35    
01   | 80    | 7    
01   | 80    | 15   
01   | 80    | 10   
01   | 80    | 25    
01   | 80    | 8   
01   | 80    | 5   
01   | 80    | 35 
01   | 20    | 20    
01   | 20    | 5    
01   | 20    | 10    
01   | 20    | 25    
01   | 20    | 35    
01   | 20    | 7    
01   | 20    | 15   
01   | 20    | 10   
01   | 20    | 25    
01   | 20    | 8   
01   | 20    | 5   
01   | 20    | 35 
01   | 30    | 20    
01   | 30    | 5    
01   | 30    | 10    
01   | 30    | 25    
01   | 30    | 35    
01   | 30    | 7    
01   | 30    | 15   
01   | 30    | 10   
01   | 30    | 25    
01   | 30    | 8   
01   | 30    | 5   
01   | 30    | 35 
01   | 70    | 20    
01   | 70    | 5    
01   | 70    | 10    
01   | 70    | 25    
01   | 70    | 35    
01   | 70    | 7    
01   | 70    | 15   
01   | 70    | 10   
01   | 70    | 25    
01   | 70    | 8   
01   | 70    | 5   
01   | 70    | 35    

私がして、グループを使用してみましたが、唯一の各テーブルの最初の量の記録を得た:

Select A.Order_Number, A.Amount, B.Amount 
From Table_A as A 
Left Join (Select Order_Number, Amount From Table_B) as B 
On A.Order_Number = B.Order_Number 
Group By A.Order_Number 

Invoice_ID | Amount_Table_A | Amount_Table_B | 
01   | 80    | 20    | 

私はそれぞれに合計を追加する()句を試してみました量のSELECT文の属性と各繰り返しレコードの合計ました:

Select A.Order_Number, sum(A.Amount), sum(B.Amount) 
From Table_A as A 
Left Join (Select Order_Number, Amount From Table_B) as B 
On A.Order_Number = B.Order_Number 
Group By A.Order_Number 

Invoice_ID | Amount_Table_A | Amount_Table_B | 
01   | 2400   | 800    | 

どのように私は、実際の値を表示するには、このクエリを変更することを??期待値:

Invoice_ID | Amount_Table_A | Amount_Table_B | 
01   | 200    | 200    | 

これは単純化されたデータセットであることに注意してください。実際のテーブルは100万レコード以上あり、両方のテーブルでInvoice_IDが同じ合計になるようにする必要があります。

ありがとうございました!

+0

テーブルAとテーブルBの両方から最初の10〜20レコードを投稿してください。また、その10〜20レコードで計算する必要がある出力もありますか。それはあなたが必要とするものを理解するのに役立ちます。 –

+0

データセットにアクセスできるように質問を編集しました。目的の出力は、各テーブルの期待値:200です。 –

答えて

1

この方法を試してみてください。

SELECT 
    A.Order_Number, A.Amount AS A_Amount, B.Amount AS B_Amount 
FROM 
    (SELECT 
     Order_Number, SUM(Amount) AS Amount 
    FROM 
     A 
    GROUP BY Order_Number) A 
     JOIN 
    (SELECT 
     Order_Number, SUM(Amount) AS Amount 
    FROM 
     B 
    GROUP BY Order_Number) B ON A.Order_Number = B.Order_Number 
+0

それは働いた!クエリの仕組みを理解するのに推奨される文献はありますか?私はこのようにそれを構築することはなかっただろう –

1

もう一度やってみてください。あなたがしようとしていることは100%明確ではありませんが、これが役立つことを願っています。あなたはあなたの参加で十分に選択的ではないようです。

Select A.Order_Number, SUM(A.Amount), SUM(B.Amount) 
From Table_A as A 
Left Join Table_B as B 
On A.Order_Number = B.Order_Number AND A.Order_Line_Number = B.Order_Line_Number 
Group By A.Order_Number 
+0

これはほとんど動作します!私は質問を編集し、あなたの修正を加えています。 B.Amountは正しく出てきましたが、A.Amountは正しいA.Amountの3倍になりました。 私の目標は、すべての私のOrder_NumbersにA.AmountとB.Amountを表示するクエリを実行することです。この例では、私はちょうど1つの注文番号を使用していますが、私は何千もあります。表Aと表Bの金額が同期していることを確認したい。 –

関連する問題