我有一个查询,它给出了当月供应商的库存美元。我有一个Inventory_Summary
表,我保存历史数据。我希望查询能够更新Inventory_Summary
表中最新月份的数据。以下是用于提取需要进入Inventory_Summary
表的库存数据的查询。
SELECT
Vendor,
SUM(Cost*QOH) AS InvDlr
FROM
dbo.Inventory
WHERE
Division NOT IN ('9999')
AND
Class NOT IN ('5500')
AND
Vendor IN ('AA','BB','CC','DD','EE')
GROUP BY
Vendor
我需要这个结果集的表格结构如下:
Inventory_Summary
Vendor
Vendor_Name
MonthNum
Year
InvDlr
如何更新当前每月的最新数据?
答案 0 :(得分:1)
使用UPDATE
的模式,从一个表到另一个表执行UPDATE Table SET fields FROM Joined Tables
非常简单:
UPDATE S
SET S.InvDlr = I.InvDlr
FROM (SELECT
Vendor,
SUM(Cost*QOH) AS InvDlr
FROM
dbo.Inventory
WHERE
Division NOT IN ('9999')
AND
Class NOT IN ('5500')
AND
Vendor IN ('AA','BB','CC','DD','EE')
GROUP BY
Vendor) I
JOIN Inventory_Summary S on I.Vendor = S.Vendor
WHERE S.MonthNum = MONTH(GETDATE())
AND S.Year = YEAR(GETDATE())
在此示例中,我只是删除了您在子查询中提供的SELECT
,并为其指定了别名I
。然后,Inventory_Summary
字段将其加入Vendor
。最后,InvDlr
字段设置为子查询中的金额。此外,Inventory_Summary
表仅针对当前月份和年份进行过滤。
演示:http://www.sqlfiddle.com/#!3/2e663/1(我离开Division
和Class
字段,但这不会影响演示。)