2013-07-17 5 views
0

결과SQL Server는 내가 두 개의 테이블이

CustomerName (varchar) 
CustomerNumber (int) 
CustomerType (int) 
CustomerDate (date) 

이 데이터베이스가 정상화되지 않습니다, 나는 할 수 그것을 바꾸지 마십시오. CustomerName과 내가해야 할 일 :

고객 번호와 일치하는 각 행에 대해 Customers의 모든 정보가 포함 된 테이블 하나가 표시되는 결과가 필요합니다. CustomerTransaction에서 나는 단지 금액의 CustomerName 당 총액을 모두 그룹화합니다.

내가 사용하고 있습니다 :

Select 
    CustomerNumber, SUM (WeeklyAmount) as Total 
from 
    Customers.RECORDS 
GROUP BY 
    CustomerNumber; 

CustomerNumber의 합계를 얻을 수 있습니다. 문제는 그룹에 CustomerName을 포함 할 수 없다는 것입니다. 때로는 고객의 이름이 시간이 지남에 따라 변경됩니다. Customers에서 데이터를 가져 와서 위의 결과에 해당하고 CustomerNumbers

과 일치하는 것으로 들었습니다. 문제는 저장 프로 시저에서 그 사실을 모르는 것입니다. 누구나 이것이 어떻게 이루어 졌는지 알 수 있습니까? 일치하는 모든 행이 필요합니다.

답변

1
Select 
CustomerNumber, SUM (WeeklyAmount) as Total from 
Customers.RECORDS GROUP BY CustomerNumber; 

무엇이 Customers.RECORDS입니까? 그것은 다소 혼란 스럽습니다. 그 외에도 나는 대답하겠다.

SELECT 
c.*, 
sq.Total 
FROM 
(
SELECT 
CustomerNumber, 
SUM(WeeklyAmount) AS Total 
FROM 
CustomersTransaction 
GROUP BY CustomerNumber 
) sq 
INNER JOIN Customers c ON c.CustomerNumber = sq.CustomerNumber 

그것이 당신이 찾고있는 것이 아니라면, 당신은 당신의 질문을 다시 말해야한다. 실제 문제가있는 곳을 이해하는 것은 약간 어렵습니다. 일반적으로 나는 조금 다른 쿼리를 작성 하겠지만, 이것은 비 정규화 문제를 처리해야한다.

0
Select 
Trans.CustomerNumber, C.CustomerName, Trans.SUM (WeeklyAmount) as Total 
from 
CustomerTransaction Trans 
join 
Customers C 
on 
Trans.CustomerNumber=C.CustomerNumber 
GROUP BY 
Trans.CustomerNumber,C.CustomerName