合并和删除SQL查询

时间:2014-10-21 18:34:54

标签: sql

您好我不确定如何修改此查询以从TURGET中删除SOURCE中不再存在的记录。另一个棘手的问题是,如果记录的T.TransactionDate小于90天,它只能从TARGET中删除记录。我知道这是一个不匹配的源,但我不知道如何构建查询的其余部分。任何人都可以帮我这个部分吗?

MERGE TransactionData AS T
USING (SELECT * FROM Temp_TransactionData) AS S
ON (T.Transaction_ID = S.Transaction_ID AND T.Trans_Line_ID = S.Trans_Line_ID) 
WHEN NOT MATCHED BY TARGET
    THEN INSERT(Account_ID, Class_ID, Company_ID, Company_Name, Design_ID, Item_ID, ItemCount, Invoice_ID, Rate, Amount, Transaction_ID, Trans_Line_ID, Transaction_Date, Transaction_Type, LicensorCode_ID, Property) VALUES(S.Account_ID, S.Class_ID, S.Company_ID, S.Company_Name, S.Design_ID, S.Item_ID, S.ItemCount, S.Invoice_ID, S.Rate, S.Amount, S.Transaction_ID, S.Trans_Line_ID, S.Transaction_Date, S.Transaction_Type, S.LicensorCode_ID, S.Property)
WHEN MATCHED 
    THEN UPDATE SET T.Account_ID = S.Account_ID, T.Class_ID = S.Class_ID, T.Company_ID = S.Company_ID, T.Company_Name = S.Company_Name, T.Design_ID=S.Design_ID, T.Item_ID=S.Item_ID, T.ItemCount=S.ItemCount, T.Invoice_ID=S.Invoice_ID, T.Rate=S.Rate, T.Amount=S.Amount,  T.Transaction_ID=S.Transaction_ID, T.Trans_Line_ID=S.Trans_Line_ID, T.Transaction_Date=S.Transaction_Date, T.Transaction_Type=S.Transaction_Type, T.LicensorCode_ID=S.LicensorCode_ID, T.Property=S.Property;

2 个答案:

答案 0 :(得分:1)

对于使用T.TransactionDate 90天或更早的合并删除事务,请使用以下内容。

WHEN NOT MATCHED BY SOURCE and T.TransactionDate < DATEADD(d, -90, current_timestamp)
   THEN DELETE

答案 1 :(得分:0)

    MERGE TransactionData AS T
    USING (SELECT * FROM Temp_TransactionData) AS S
    ON (T.Transaction_ID = S.Transaction_ID AND T.Trans_Line_ID = S.Trans_Line_ID) 
    WHEN NOT MATCHED BY TARGET
        THEN INSERT(Account_ID, Class_ID, Company_ID, Company_Name, Design_ID, Item_ID, ItemCount, Invoice_ID, Rate, Amount, Transaction_ID, Trans_Line_ID, Transaction_Date, Transaction_Type, LicensorCode_ID, Property) VALUES(S.Account_ID, S.Class_ID, S.Company_ID, S.Company_Name, S.Design_ID, S.Item_ID, S.ItemCount, S.Invoice_ID, S.Rate, S.Amount, S.Transaction_ID, S.Trans_Line_ID, S.Transaction_Date, S.Transaction_Type, S.LicensorCode_ID, S.Property)
    WHEN MATCHED 
        THEN UPDATE SET T.Account_ID = S.Account_ID, T.Class_ID = S.Class_ID, T.Company_ID = S.Company_ID, T.Company_Name = S.Company_Name, T.Design_ID=S.Design_ID, T.Item_ID=S.Item_ID, T.ItemCount=S.ItemCount, T.Invoice_ID=S.Invoice_ID, T.Rate=S.Rate, T.Amount=S.Amount,  T.Transaction_ID=S.Transaction_ID, T.Trans_Line_ID=S.Trans_Line_ID, T.Transaction_Date=S.Transaction_Date, T.Transaction_Type=S.Transaction_Type, T.LicensorCode_ID=S.LicensorCode_ID, T.Property=S.Property;
WHEN NOT MATCHED BY SOURCE AND T.TransactionDate <90
    THEN DELETE