2017-09-14 19 views
0

我想弄明白在特定情況下的group by子句:我加入了兩張應該有相同的美元金額爲每張發票,所以我試圖作出查詢以確認沒有差異。這裏是表,查詢和結果:缺少數據與羣和和

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    | 

請注意,這是一個過於簡化的數據集。真正的表有超過一百萬條記錄,我需要確保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出來的3X是正確的A.Amount。 我的目標是運行一個查詢,它將爲我的所有Order_Numbers顯示A.Amount和B.Amount。在這個例子中,我只使用了1個訂單號,但我有數千個訂單號。我想確保表A和B中的數量是同步的。 –