SQL:返回的错误总数

问题描述 投票:1回答:1

我正在一个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;

“表格”

sql sum invoice
1个回答
0
投票

您可以先在子查询中将发票分组。然后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?

© www.soinside.com 2019 - 2024. All rights reserved.