【问题标题】:SQL Server Merge Statement to return zero if no record for an id如果 id 没有记录,SQL Server 合并语句返回零
【发布时间】:2019-05-16 11:24:57
【问题描述】:

我正在使用合并语句来更新 ModuleEnrollment 表中完成的课程数。这可行,但是如果从 Employee 中删除课程,则它仍保持其先前的值。有没有办法在合并语句中包含任何 EmployeeID 未包含在 CoursesComplete 表中的返回 0。

 MERGE [dbo].[ModuleEnrollment] as ME
 USING  [dbo].[CoursesComplete]AS CC
 ON ME.[EmployeeID] = CC.[EmployeeID] AND ME.[ModuleID] = CC.[ModuleID]
 WHEN MATCHED THEN
      UPDATE SET ME.[CoursesComplete]=CC.[CoursesComplete]
 WHEN NOT MATCHED BY TARGET THEN
      INSERT([EmployeeID],[ModuleID],[CoursesComplete]) VALUES(CC. 
[EmployeeID],CC.[ModuleID],CC.[CoursesComplete]);

GO

【问题讨论】:

    标签: sql-server merge


    【解决方案1】:

    您只需添加:

    WHEN NOT MATCHED BY SOURCE THEN 
        UPDATE SET ME.[CoursesComplete]=0
    

    整个查询:

    ;MERGE [dbo].[ModuleEnrollment] as ME
     USING  [dbo].[CoursesComplete]AS CC
     ON ME.[EmployeeID] = CC.[EmployeeID] AND ME.[ModuleID] = CC.[ModuleID]
     WHEN MATCHED THEN
          UPDATE SET ME.[CoursesComplete]=CC.[CoursesComplete]
     WHEN NOT MATCHED BY TARGET THEN
          INSERT([EmployeeID],[ModuleID],[CoursesComplete]) VALUES(CC. 
    [EmployeeID],CC.[ModuleID],CC.[CoursesComplete])
    WHEN NOT MATCHED BY SOURCE THEN 
            UPDATE SET ME.[CoursesComplete]=0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      相关资源
      最近更新 更多