-- ============================================= -- Author: S.E. Locatelli -- Create date: 2013.11.27 -- Description: Procedura per import dati in Package2ItemClient da dati ProductionLogRaw -- ============================================= CREATE PROCEDURE [ext].[stp_mergePackage2ItemClient] ( @source NVARCHAR(20) = 'ProductionLog', -- nome della tabella sorgente tra ProductionLogRaw e ItemsRaw @dateFrom DATETIME, -- data da cui iniziare a caricare @dateTo DATETIME -- data fino a cui caricare ) AS BEGIN SET NOCOUNT ON; -- Create a temporary table variable to hold the output actions. DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20)); -- import con MERGE... verifico tipo di caricamento richiesto! IF @source = 'ProductionLog' -- carico da tracciato produzione BEGIN MERGE INTO Package2ItemClient AS Target USING ( --SELECT dd.CodItem, plr.CodClient, plr.CodPackag, SUM(QtyOUT) AS TotQta, COUNT(*) AS NumEv -- , SUM(QtyOUT) / COUNT(*) AS PesoMedio -- , SUM(QtyEXT) / COUNT(*) AS TaraMedia --FROM ext.ProductionLogRaw plr -- INNER JOIN DiesDet dd ON plr.CodDies = dd.CodDies -- WHERE ISNULL(plr.CodPackag, '') <> '' --GROUP BY dd.CodItem, plr.CodClient, plr.CodPackag SELECT dd.CodItem , pl.CodClient , pl.CodPackag , SUM(QtyOUT) AS TotQta -- , COUNT(*) AS NumEv , SUM(QtyOUT) / COUNT(*) AS PesoMedio , SUM(QtyEXT) / COUNT(*) AS TaraMedia -- dati produttività imballo , ROUND(SUM(QtyOUT* QuotaMan) / CASE WHEN SUM(QtyOUT) = 0 THEN 1 ELSE SUM(QtyOUT) END,0) as NumImb , SUM(Duration) AS Durata FROM dbo.ProductionLog pl INNER JOIN dbo.DiesDet dd ON pl.CodDies=dd.CodDies WHERE pl.ProcessNum = '04' AND pl.okPr = 1 AND pl.okQM = 1 AND ISNULL(pl.CodPackag, '') <> '' AND pl.EventStart BETWEEN @dateFrom AND @dateTo GROUP BY dd.CodItem, pl.CodClient, pl.CodPackag ) AS Source ON Target.CodItem = Source.CodItem AND Target.CodClient = Source.CodClient AND Target.CodPackag = Source.CodPackag WHEN MATCHED THEN UPDATE SET TotQta = Source.TotQta , [Weight] = Source.PesoMedio , Tare = Source.TaraMedia , NumImb = Source.NumImb , Durata = Source.Durata WHEN NOT MATCHED BY TARGET THEN INSERT (CodItem, CodClient, CodPackag, TotQta, [Weight], Tare, NumImb, Durata) VALUES (CodItem, CodClient, CodPackag, TotQta, PesoMedio, TaraMedia, NumImb, Durata) WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT $action INTO @SummaryOfChanges; END --ELSE IF @source = 'ItemsRaw' -- carico da anagrafica -- BEGIN -- MERGE INTO Item2PackageClient AS Target -- USING (SELECT CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup FROM ItemsRaw) -- AS Source -- ON Target.CodItem = Source.CodItem -- WHEN MATCHED THEN -- UPDATE SET ItemDescr = Source.ItemDescr, CodPlant = Source.CodPlant, UnitWeight = Source.UnitWeight, CodItemGroup = Source.CodItemGroup -- WHEN NOT MATCHED BY TARGET THEN -- INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) -- OUTPUT $action INTO @SummaryOfChanges; -- END -- Query the results of the table variable. SELECT Change, COUNT(*) AS CountPerChange FROM @SummaryOfChanges GROUP BY Change; END