我有两张桌子:
CustomerTransaction
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
。有时,客户的名称会随着时间而变化。我被告知从Customers
获取数据并将其与上面的结果相匹配并匹配CustomerNumbers
问题是我不知道存储过程。有谁知道这是怎么做的? 我需要匹配所有行。
答案 0 :(得分: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
如果那不是你想要的,你必须改写你的问题。有点难以理解实际问题在哪里。通常我会把查询写得有些不同,但这应该处理非规范化问题。
答案 1 :(得分: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