105 lines
4.6 KiB
Transact-SQL
105 lines
4.6 KiB
Transact-SQL
|
|
|
|
|
|
-- =============================================
|
|
-- Author: S.E. Locatelli
|
|
-- Create date: 2013.12.02
|
|
-- Description: Procedura per import dati in DiesDet da dati ProductionLogRaw/DiesRaw
|
|
-- =============================================
|
|
CREATE PROCEDURE [ext].[stp_mergeDiesDet]
|
|
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
-- Create a temporary table variable to hold the output actions.
|
|
DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));
|
|
|
|
SET XACT_ABORT ON
|
|
|
|
BEGIN tran
|
|
|
|
-- =======================================
|
|
-- ora aggiungiamo eventuali item mancanti
|
|
-- =======================================
|
|
MERGE INTO ItemDet AS Target
|
|
USING (SELECT DISTINCT CodItem FROM ext.DiesRaw)
|
|
AS Source
|
|
ON Target.CodItem = Source.CodItem
|
|
--WHEN MATCHED THEN
|
|
-- UPDATE SET ClientName = Source.ClientName
|
|
WHEN NOT MATCHED BY TARGET THEN
|
|
INSERT (CodItem, ItemDescr, CodPlant, UnitWeight, CodItemGroup) VALUES (CodItem, '#### - ' + CodItem, '', 0, '')
|
|
OUTPUT $action INTO @SummaryOfChanges;
|
|
|
|
-- =======================================
|
|
-- ora carico i dati delle singole matrici
|
|
-- =======================================
|
|
MERGE INTO DiesDet AS Target
|
|
USING (SELECT CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active FROM ext.DiesRaw)
|
|
AS Source
|
|
ON Target.CodDies = Source.CodDies
|
|
WHEN MATCHED THEN
|
|
UPDATE SET HoleNum = Source.HoleNum, CodItem = Source.CodItem, CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, ExpLife = Source.ExpLife, ActLife = Source.ActLife, Active = Source.Active
|
|
WHEN NOT MATCHED BY TARGET THEN
|
|
INSERT (CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active) VALUES (CodDies, HoleNum, CodItem, CodDiesGroup, Price, ExpLife, ActLife, Active)
|
|
OUTPUT $action INTO @SummaryOfChanges;
|
|
|
|
-- =================================================
|
|
-- Carico i dati dei GRUPPI DI MATRICI ( DiesGroupDet )
|
|
-- nel caso debbano essere integrati vanno caricati nella tabella ext.DiesGroupRaw
|
|
-- =================================================
|
|
MERGE INTO dbo.DiesGroupDet AS Target
|
|
USING (
|
|
SELECT CodDiesGroup
|
|
, ISNULL ( AVG( Price ),0) AS Price -- prezzo medio ( valori nulli non considerati )
|
|
, COUNT (*) AS QtyTot -- N. Matrici nel gruppo
|
|
, COUNT ( CASE Active WHEN 0 THEN 1 END ) AS QtyEOL -- Qta Matrici rottamate
|
|
, ISNULL( AVG( ExpLife ), 0 ) AS ExpLife -- Vita stimata matrice ( iniziale )
|
|
, ISNULL( AVG ( CASE WHEN Active = 0 AND ActLife > 5000 THEN ActLife END ),0 ) AS EOLLife -- solo Matrici rottamate e vita > 5000KG
|
|
FROM dbo.DiesDet
|
|
GROUP BY CodDiesGroup
|
|
) AS Source
|
|
ON Target.CodDiesGroup = Source.CodDiesGroup
|
|
WHEN MATCHED THEN
|
|
UPDATE SET CodDiesGroup = Source.CodDiesGroup, Price = Source.Price, QtyTot = Source.QtyTot
|
|
, QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife
|
|
, DateMod = GETDATE(), UserMod = 'IMPORT_DiesRaw'
|
|
|
|
WHEN NOT MATCHED BY TARGET THEN
|
|
INSERT ( CodDiesGroup, Price, QtyTot, QtyEOL, ExpLife, EOLLife, DateMod ,UserMod )
|
|
VALUES ( CodDiesGroup, Source.Price, Source.QtyTot, Source.QtyEOL, Source.ExpLife, Source.EOLLife, GETDATE(), 'IMPORT_DiesRaw' ) -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife
|
|
OUTPUT $action INTO @SummaryOfChanges;
|
|
|
|
|
|
---- a questo punto calcolo il VERO update dalle inforamzioni di dbo.DiesDet --> dbo.DiesGroupDet
|
|
--MERGE INTO dbo.DiesGroupDet AS Target
|
|
--USING (
|
|
-- SELECT coddiesgroup,
|
|
-- Avg(Isnull(price, 0)) AS Price,
|
|
-- Count(*) AS QtyTot,
|
|
-- Count(*) - Sum(Active) AS QtyEOL,
|
|
-- Avg(Isnull(ExpLife, 0.1)) AS ExpLife, -- mi da errori in calcoli successivi altrimenti con zero a ExpLife e EOLLife
|
|
-- Sum(Isnull(ActLife * (1 - Active), 0)) / (Count(*) - Sum(Active)) AS EOLLife
|
|
-- FROM dbo.DiesDet
|
|
-- WHERE ActLife > 5000
|
|
-- GROUP BY CodDiesGroup
|
|
-- HAVING Count(*) > Sum(Active) -- ci siano rottamate
|
|
-- )
|
|
-- AS Source
|
|
--ON Target.CodDiesGroup = Source.CodDiesGroup
|
|
--WHEN MATCHED THEN
|
|
-- UPDATE SET Price = Source.Price, QtyTot = Source.QtyTot, QtyEOL = Source.QtyEOL, ExpLife = Source.ExpLife, EOLLife = Source.EOLLife
|
|
--OUTPUT $action INTO @SummaryOfChanges;
|
|
|
|
COMMIT tran
|
|
|
|
-- Query the results of the table variable.
|
|
SELECT Change, COUNT(*) AS CountPerChange
|
|
FROM @SummaryOfChanges
|
|
GROUP BY Change;
|
|
END
|
|
|
|
|
|
|