0

我有两张桌子:

客户交易

Id (int auto int)
CustomerName (varchar)
CustomerNumber (int)
Date (date)
WeeklyAmount (int)

客户

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在 group by 中。有时客户的名字会随着时间而改变。我被告知要从Customers上面的结果中获取数据并匹配CustomerNumbers

问题是我不知道存储过程。有谁知道这是怎么做到的?我需要所有匹配的行。

4

2 回答 2

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

如果这不是你要找的,你必须改写你的问题。很难理解实际问题出在哪里。通常我会写一些不同的查询,但这应该处理非规范化问题。

于 2013-07-17T18:10:44.073 回答
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
于 2013-07-17T18:12:11.340 回答