使用联接选项更新SQL Server表

使用联接选项更新SQL Server表,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,正如您看到的这两个表一样,我想将数据从表Invoice更新/同步到表HR 该场景是在HR列和PO Number列中手动输入数据,然后使用表Invoice进行更新。我认为这样做的想法是只将数据与表HR中的现有采购订单号连接起来,如果采购订单号不存在,则无需获取行。此外,列month的格式看起来像一个数字,因此如何在SQL中仅获取month,而与日期的格式无关 如果年份确实不成问题,那么您可以静态执行 但我猜你真的想在人力资源表中添加一个年份字段 UPDATE INVOICE FROM HR

正如您看到的这两个表一样,我想将数据从表
Invoice
更新/同步到表
HR

该场景是在
HR
列和
PO Number
列中手动输入数据,然后使用表
Invoice
进行更新。我认为这样做的想法是只将数据与表
HR
中的现有采购订单号连接起来,如果采购订单号不存在,则无需获取行。此外,列month的格式看起来像一个数字,因此如何在SQL中仅获取month,而与日期的格式无关

如果年份确实不成问题,那么您可以静态执行

但我猜你真的想在人力资源表中添加一个年份字段

UPDATE INVOICE
  FROM HR
 WHERE INVOICE.po_number = HR.po_number
   SET INVOICE.amount = 
           CASE WHEN INVOICE.MONTH = 20190124 THEN HR.JANUARY
                WHEN INVOICE.MONTH = 20190224 THEN HR.FEBUARY
                WHEN INVOICE.MONTH = 20190324 THEN HR.MARCH
                WHEN INVOICE.MONTH = 20190424 THEN HR.APRIL
                WHEN INVOICE.MONTH = 20190524 THEN HR.MAY
                WHEN INVOICE.MONTH = 20190624 THEN HR.JUNE
                WHEN INVOICE.MONTH = 20190724 THEN HR.JULY
                WHEN INVOICE.MONTH = 20190824 THEN HR.AUGUST
                WHEN INVOICE.MONTH = 20190924 THEN HR.SEPTEMBER
                WHEN INVOICE.MONTH = 20191024 THEN HR.OCTOBER
                WHEN INVOICE.MONTH = 20191124 THEN HR.NOVEMBER
                WHEN INVOICE.MONTH = 20191224 THEN HR.DECEMBER
                ELSE INVOICE.AMOUNT
            END;
如果年份真的不成问题,那么你可以静态地做

但我猜你真的想在人力资源表中添加一个年份字段

UPDATE INVOICE
  FROM HR
 WHERE INVOICE.po_number = HR.po_number
   SET INVOICE.amount = 
           CASE WHEN INVOICE.MONTH = 20190124 THEN HR.JANUARY
                WHEN INVOICE.MONTH = 20190224 THEN HR.FEBUARY
                WHEN INVOICE.MONTH = 20190324 THEN HR.MARCH
                WHEN INVOICE.MONTH = 20190424 THEN HR.APRIL
                WHEN INVOICE.MONTH = 20190524 THEN HR.MAY
                WHEN INVOICE.MONTH = 20190624 THEN HR.JUNE
                WHEN INVOICE.MONTH = 20190724 THEN HR.JULY
                WHEN INVOICE.MONTH = 20190824 THEN HR.AUGUST
                WHEN INVOICE.MONTH = 20190924 THEN HR.SEPTEMBER
                WHEN INVOICE.MONTH = 20191024 THEN HR.OCTOBER
                WHEN INVOICE.MONTH = 20191124 THEN HR.NOVEMBER
                WHEN INVOICE.MONTH = 20191224 THEN HR.DECEMBER
                ELSE INVOICE.AMOUNT
            END;

使用pivot将发票行转换为列(PO编号和月份)。然后通过与转换后的表数据联接来更新HR表。

使用pivot将发票行转换为列(采购订单编号和月份)。然后使用转换后的表格数据更新HR表格。

请重新编写您的问题!在HR表中,您没有“年份”列。那么,您只维护一年的数据?明年会发生什么?每个月的数据都被覆盖了?@fiveelements,这一年不是问题,我需要用月份更新您想用连接创建更新查询吗?如果这是你的问题,为什么不在线搜索答案呢?我刚刚这么做了,我发现:@MedAmin今年是一个问题,如果你想让它持续几个月以上。请重新表述你的问题!在HR表中,您没有“年份”列。那么,您只维护一年的数据?明年会发生什么?每个月的数据都被覆盖了?@fiveelements,这一年不是问题,我需要用月份更新您想用连接创建更新查询吗?如果这是你的问题,为什么不在线搜索答案呢?我刚刚这么做了,我发现:@MedAmin The year是一个问题,如果您想让它继续工作几个月以上。此查询将根据HR表更新发票表中的金额。这相对比较容易。然而,问题恰恰相反,这有点不同:“我想更新/同步表Invoice到表HR的数据”。那么这是如何被接受为答案的?@fiveelements在我的问题中,我使用了一个例子,错误_2646给出的答案让我知道了如何使用“Case-When”来实现这一点,因此我接受他的回答。此查询根据HR表更新发票表中的金额。这相对比较容易。然而,问题恰恰相反,这有点不同:“我想更新/同步表Invoice到表HR的数据”。那么这是如何被接受为答案的呢?@fiveelements在我的问题中,我使用了一个例子,错误_2646给出的答案让我知道如何使用“Case-When”来做,所以我接受了他的答案