Listing 4: Incremental Update WITH LastDay AS ( SELECT GROUPING_ID( custid, empid, YEAR(orderdate), MONTH(orderdate), DAY(orderdate) ) AS grp_id, custid, empid, YEAR(orderdate) AS orderyear, MONTH(orderdate) AS ordermonth, DAY(orderdate) AS orderday, SUM(qty) AS qty FROM dbo.Orders WHERE orderdate = '20080419' GROUP BY CUBE(custid, empid), ROLLUP(YEAR(orderdate), MONTH(orderdate), DAY(orderdate)) ) MERGE INTO dbo.MyGroupingSets AS TGT USING LastDay AS SRC ON (TGT.grp_id = SRC.grp_id) AND (TGT.orderyear = SRC.orderyear OR (TGT.orderyear IS NULL AND SRC.orderyear IS NULL)) AND (TGT.ordermonth = SRC.ordermonth OR (TGT.ordermonth IS NULL AND SRC.ordermonth IS NULL)) AND (TGT.orderday = SRC.orderday OR (TGT.orderday IS NULL AND SRC.orderday IS NULL)) AND (TGT.custid = SRC.custid OR (TGT.custid IS NULL AND SRC.custid IS NULL)) AND (TGT.empid = SRC.empid OR (TGT.empid IS NULL AND SRC.empid IS NULL)) WHEN MATCHED THEN UPDATE SET TGT.qty += SRC.qty WHEN NOT MATCHED THEN INSERT (grp_id, custid, empid, orderyear, ordermonth, orderday) VALUES (SRC.grp_id, SRC.custid, SRC.empid, SRC.orderyear, SRC.ordermonth, SRC.orderday);