我正在一个SQL项目中,我有一个存储过程,我将在特定时间段内返回每个客户的总发票。我编写了一个存储过程,该过程返回每个客户的总金额,但是总结果比实际金额要高一点。
这是我的存储过程,下面是下表。谢谢您的时间。
CREATE PROCEDURE QUERY4
@p_StartDate DATE, @p_EndDate DATE
AS
BEGIN
SELECT ct.*, SUM(iv.Total) AS Total
FROM Customer AS ct, Invoice AS iv
WHERE ct.CustomerId = iv.CustomerId
AND iv.InvoiceDate BETWEEN @p_StartDate AND @p_EndDate
GROUP BY ct.CustomerId, ct.FirstName, ct.LastName, ct.Company, ct.Country, ct.State, ct.City,
ct.Address, ct.PostalCode, ct.Phone, ct.Fax, ct.Email, ct.SupportRepId
ORDER BY Total DESC
END;
您可以先在子查询中将发票分组。然后INNER JOIN
给客户。
SELECT ct.*, inv.Total
FROM
(
SELECT i.CustomerId, SUM(i.Total) AS Total
FROM Invoice i
WHERE i.InvoiceDate >= @p_StartDate
AND i.InvoiceDate <= @p_EndDate
GROUP BY i.CustomerId
) inv
INNER JOIN Customer AS ct
ON ct.CustomerId = inv.CustomerId
ORDER BY inv.Total DESC
但是这应该得到与以前相同的结果。因此,也许您可以共享使用发现23的查询。另外,InvoiceDate是DATE类型还是DATETIME?