Database 更新SQL查询以基于两个日期更新表

Database 更新SQL查询以基于两个日期更新表,database,ms-access,Database,Ms Access,我想根据两个日期更新我的查询表,我尝试了以下代码,但没有成功 UPDATE [Stock Report] INNER JOIN Report ON [Stock Report].ItemID = Report.ItemID SET [Stock Report].Amount = SUM(Report.Amount) WHERE [Date Product Was Made] BETWEEN @AA AND @BB 我的两个查询表是Report和Stock Report 报表 ItemID|

我想根据两个日期更新我的查询表,我尝试了以下代码,但没有成功

UPDATE [Stock Report] INNER JOIN Report ON [Stock Report].ItemID = Report.ItemID SET [Stock Report].Amount = SUM(Report.Amount) WHERE [Date Product Was Made] BETWEEN @AA AND @BB
我的两个查询表是Report和Stock Report

报表

ItemID|    Item      |Date Product Was Made|Amount|ProductID|Product Name
  10      Flour        11/17/2015            100     54       Saltbread
  11    Bran Flakes    11/17/2015            100     54       Saltbread
  10      Flour        11/17/2015            100     54       Saltbread
  11    Bran Flakes    11/17/2015            100     54       Saltbread
ItemID|  Item      |  Start Date  |  End Date  |Amount
 10      Flour        11/16/2015    11/25/2015   200
 11     Bran Flakes   11/16/2015    11/25/2015   200
我想在股票报告表中看到什么

ItemID|    Item      |Date Product Was Made|Amount|ProductID|Product Name
  10      Flour        11/17/2015            100     54       Saltbread
  11    Bran Flakes    11/17/2015            100     54       Saltbread
  10      Flour        11/17/2015            100     54       Saltbread
  11    Bran Flakes    11/17/2015            100     54       Saltbread
ItemID|  Item      |  Start Date  |  End Date  |Amount
 10      Flour        11/16/2015    11/25/2015   200
 11     Bran Flakes   11/16/2015    11/25/2015   200

日期可以是任意两个随机日期,但该表应根据日期范围之间使用的金额生成合计。Wht]at将是完成此过程的SQL代码

您使用mysql、SQL server和ms access标记

但每个案例的答案都不尽相同

这里是SQLServer解决方案:

WITH SumAmount AS (
SELECT 
        ItemId
        ,SUM(Report.amount) as sum_amount
    FROM
        Report
    GROUP BY
        ItemId
)
UPDATE SR
    SET
        amount = SA.sum_amount
    FROM 
        [Stock Report] SR
        JOIN SumAmount SA ON SR.ItemID = SA.ItemID
    WHERE   
        [Date Product Was Made] BETWEEN @AA AND @BB
假设MS Access查询我对MSACCESS不太精通,可以这样说:


正如Ephoriagrogi提到的,你们非常接近

SELECT ItemID, Item, @AA AS StartDate, @BB AS EndDate, SUM(Amount) AS TotalAmount
FROM (YourReportTableQueryWith@AAAnd@BBParametersHere) AS SubQuery
GROUP BY SubQuery.ItemID,SubQuery.Item

有关GROUP BY的更多信息,请点击此处:

什么是[产品制造日期]列的数据类型?它是否也用日期存储时间值?传递给查询的参数值是什么?您几乎可以添加分组项id来求和行。您只需将date no time@HarshAre这些表存储在数据库中,或者它们是查询的结果集?您能否解释一下@EuphoriaGrogiI正在使用MS Access?对于混淆的标记Haaaat,很抱歉?您没有直接指定:PMy谦逊的抱歉,您仍然可以帮助我使用此代码的Ms Access版本吗?我尝试运行代码时出错。我的报告表查询是SELECT Rec.ItemID,Rec.Item,Iso。[产品制作日期]、Rec.Amount,Iso.ProductID,Iso。[产品名称]FROMECIPES AS Rec INTERNAR JOIN[临时存储订单]在Rec.ProductID=Iso.ProductID上作为Iso;@AdishPost您的完整查询在此选择ItemID,Item,AA作为起始日期,BB作为结束日期,SUMAmount作为金额,从Recipes中选择Rec.ItemID,Rec.Item,Iso。[产品制造日期],Rec.Amount,Iso.ProductID,Iso。[产品名称]作为Rec INNER JOIN[临时存储订单]AS Iso ON Rec.ProductID=Iso.ProductID作为子查询组BY SubQuery.ItemID,SubQuery.Item错误,表示循环引用是由查询定义的SELE中的别名“Amount”引起的CT listi删除了@out,因为它给了我任何要发布的错误,但是我的Access数据中有它。将别名更改为TotalAmount。这应该可以解决问题