【发布时间】:2019-12-21 15:47:58
【问题描述】:
我正在处理一个 SQL 项目,其中我有一个存储过程,用于返回每个客户在特定时间段内的总发票。我编写了一个存储过程,它返回每个客户的总金额,但总结果略高于实际金额。
- 客户 1 总计:23(单独查询找到他)
- 客户 1:总共 25 个(使用存储过程)
这是我的存储过程,我有下表。感谢您的宝贵时间。
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;
【问题讨论】:
-
如果您想要每个客户的总发票,那么您只需按 customerid 而不是其他列分组,因为客户可能具有相同的姓名,或者在某些发票中可能没有正确输入详细信息
-
发布用于查找单个客户总数的查询。
-
考虑到我已将它们包含在选择中,我无法删除其余部分。
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用它