Sql 计算联接表中的第一个表
我的sql查询有问题。我有两张桌子(a.销售,b.销售详情)。对于行:Sql 计算联接表中的第一个表,sql,ms-access,oledb,Sql,Ms Access,Oledb,我的sql查询有问题。我有两张桌子(a.销售,b.销售详情)。对于行: Sales SalesDetail ------ ----------- SaleNo : MakeDate IDSalesDetail: SaleNo : ItemCode : ItemPrice : ItemQty --------:--------- -------------:--------:----------:---------
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 :
因为计数(*)
会影响SalesDetail表
如果有人能解决我的问题,我将不胜感激
谢谢,祝你今天愉快 尝试在计数时使用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')
尝试在计数时使用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')
我自己刚刚找到了我自己答案的公式,如果你想知道怎么做,请检查一下
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')
我自己刚刚找到了我自己答案的公式,如果你想知道怎么做,请检查一下
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')
查询表达式“COUNT(DISTINCT SalesDetail.NoSale)”中出现语法错误(缺少运算符)。我在查询表达式“COUNT(DISTINCT SalesDetail.NoSale)”中使用Access 2007 FYISyntax错误(缺少运算符)。我正在使用Access 2007仅供参考