Files
C2P/C2P_Project/ext/Stored Procedures/stp_mergeDiesDet.sql
T
2014-02-18 18:01:35 +01:00

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