计算连接表中的第一个表

时间:2015-12-28 06:36:28

标签: sql ms-access oledb

我的SQL查询有问题。我有2个表(a。销售,b。SalesDetail)。使用行:

Sales                  SalesDetail
------                 -----------
SaleNo  : MakeDate     IDSalesDetail: SaleNo : ItemCode : ItemPrice : ItemQty
--------:---------     -------------:--------:----------:-----------:--------:      
    1   :12/18/2015         1       :   1    :   001    :   100     :   5
    2   :12/28/2015         2       :   2    :   001    :   100     :  10
    3   :01/08/2016         3       :   3    :   001    :   100     :  20
                            4       :   2    :   002    :    50     :  10
                            5       :   1    :   002    :    50     :   5

我需要提供

等结果的查询
TotalReceipt : Year  : Amount :
-------------:-------:--------:
      2      : 2015  : 2250   :
      1      : 2016  : 2000   :

我使用了这个查询

SELECT COUNT(Sales.SaleNo) AS TotalReceipt, 
       FORMAT(Sales.MakeDate, 'yyyy') AS [Year], 
       SUM(SalesDetail.ItemQty * SalesDetail.ItemPrice) AS Amount
FROM (Sales INNER JOIN SalesDetail ON Sales.SaleNo = SalesDetail.SaleNo)
GROUP BY FORMAT(Sales.MakeDate, 'yyyy')

但它给了我这个而不是

TotalReceipt : Year  : Amount :
-------------:-------:--------:
      4      : 2015  : 2250   :
      1      : 2016  : 2000   :

由于Count(*)影响SalesDetail表。

如果有人能解决我的问题,我会感激不尽

谢谢你,祝你有愉快的一天!

2 个答案:

答案 0 :(得分:0)

尝试使用distinct来计算如下:

SELECT COUNT(DISTINCT SalesDetail.NoSale) AS TotalReceipt, 
FORMAT(Sales.MakeDate, 'yyyy') AS [Year], 
SUM(SalesDetail.ItemQty * SalesDetail.ItemPrice) AS Amount
FROM (Sales INNER JOIN SalesDetail ON Sales.SaleNo = SalesDetail.SaleNo)
GROUP BY FORMAT(Sales.MakeDate, 'yyyy')

答案 1 :(得分:0)

我自己找到了自己答案的公式,如果你想知道如何检查这个

SELECT COUNT(*) AS TotalReceipt, Format(MakeDate, 'yyyy') AS [Year], SUM(Total) AS Amount
FROM (        
             SELECT  SaleNo, SUM(ItemQty * ItemPrice) AS Total
                      FROM            SalesDetail
                      GROUP BY SaleNo) DetailSum 
INNER JOIN Sales ON Sales.SaleNo = DetailSum.SaleNo
GROUP BY Format(MakeDate, 'yyyy')