在单独的TABLE中更新单独TABLE中的SELECT查询中的字段

时间:2013-04-22 20:27:06

标签: tsql sql-server-2012

我有一个查询,它给出了当月供应商的库存美元。我有一个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 

如何更新当前每月的最新数据?

1 个答案:

答案 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(我离开DivisionClass字段,但这不会影响演示。)