1

次の基準に基づいて、SQL Server を使用して 2 つのテーブルをマージします。

IF the primary key (Operation) matches THEN
    If Source Date Matches Target Date
        Do nothing
    Else
        SET Target Revised_Date to Source Date
Else
    Insert Target Row from Source Row

最初の段階を実行する以下の SQL マージを作成しましたが、2 番目の段階を実行する方法がわかりません。

MERGE 
    Completed_Operations AS target
USING 
    @Completed_Operation_Table AS source ON (target.Operation = source.Operation)
WHEN MATCHED THEN 
    UPDATE 
    SET target.Revised_Completion_Date  = source.Completion_Date,
            target.Revised_Pln_Hrs          = source.Pln_Hrs,
            target.Revised_Pln_Hrs_Capped   = source.Pln_Hrs_Capped,
            target.Revised_Act_Hrs          = source.Act_Hrs
WHEN NOT MATCHED THEN   
    INSERT (Operation, Orig_Completion_Date, Orig_Pln_Hrs, Orig_Act_Hrs, Revised_Completion_Date, Revised_Pln_Hrs, Revised_Act_Hrs)
    VALUES (source.Operation, source.Completion_Date, source.Pln_Hrs, source.Act_Hrs, NULL, NULL, NULL);
4

1 に答える 1

3

WHEN 句では、条件を追加できます

MERGE
Completed_Operations AS target
USING 
@Completed_Operation_Table AS source ON (target.Operation = source.Operation)
WHEN MATCHED AND (source.Date <> target.Date) THEN
  UPDATE 
    SET target.Revised_Completion_Date  = source.Completion_Date,
        target.Revised_Pln_Hrs          = source.Pln_Hrs,
        target.Revised_Pln_Hrs_Capped   = source.Pln_Hrs_Capped,
        target.Revised_Act_Hrs          = source.Act_Hrs
WHEN NOT MATCHED THEN
  INSERT (Operation, Orig_Completion_Date, Orig_Pln_Hrs, Orig_Act_Hrs, Revised_Completion_Date, Revised_Pln_Hrs, Revised_Act_Hrs)
  VALUES (source.Operation, source.Completion_Date, source.Pln_Hrs, source.Act_Hrs, NULL, NULL, NULL);
于 2012-11-02T21:36:51.430 に答える