2017-09-14 1 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    

I에 의해 그룹을 사용하여 시도,하지만 각 테이블에 대한 최초의 양의 기록을 가지고 :

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    | 

나는 각각 합계() 절을 추가하는 시도를 amount 속성을 사용하여 각 반복 레코드의 합계를 얻었습니다.

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가 올바른 A.Amount의 3 배가되었습니다. 내 목표는 내 모든 Order_Numbers에 대해 A.Amount 및 B.Amount를 표시하는 쿼리를 실행하는 것입니다. 이 예에서는 단지 하나의 주문 번호 만 사용하고 있지만 수천이 있습니다. 표 A와 B의 금액이 동기화되어 있는지 확인하고 싶습니다. –

관련 문제