177 lines
6.2 KiB
Transact-SQL
177 lines
6.2 KiB
Transact-SQL
|
|
|
|
-- =============================================
|
|
-- Author: S.E. Locatelli
|
|
-- Create date: 2013.12.13
|
|
-- Description: Crea TabProdSc (tabella produttività/scarti)
|
|
-- =============================================
|
|
CREATE PROCEDURE [dbo].[stp_TPS_upsert]
|
|
(
|
|
@dateFrom DATETIME, -- data da cui iniziare a caricare
|
|
@dateTo DATETIME -- data fino a cui caricare
|
|
)
|
|
AS
|
|
BEGIN
|
|
|
|
SET XACT_ABORT ON;
|
|
BEGIN TRAN
|
|
|
|
SET NOCOUNT ON;
|
|
|
|
-- svuoto tabella...
|
|
TRUNCATE TABLE TabProdSc
|
|
|
|
-- riempio di nuovo valori! chiave AMIL
|
|
INSERT INTO TabProdSc
|
|
SELECT
|
|
dd.CodItem + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) AS KeyAMIL
|
|
, dd.CodDiesGroup
|
|
, dd.CodItem + '-' + pl.RawMat AS KeyAM
|
|
, dd.CodItem, pl.RawMat, pl.CodPlant, dd.HoleNum
|
|
, 0 AS NumSMED -- numero cambi, da sistemare...
|
|
, SUM(QtyOUT) AS KgTeorici
|
|
, SUM(QtyIN) AS KgLordi
|
|
, SUM(Duration) AS Durata
|
|
FROM ProductionLog pl
|
|
INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies
|
|
WHERE pl.ProcessNum='01' and pl.EventType=1
|
|
AND pl.okPr = 1
|
|
AND pl.okSc = 1
|
|
AND pl.EventStart BETWEEN @dateFrom AND @dateTo
|
|
GROUP BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum
|
|
ORDER BY dd.CodItem, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC
|
|
|
|
-- riempio di nuovo valori! chiave CMIL
|
|
INSERT INTO TabProdSc
|
|
SELECT
|
|
id.CodItemGroup + '-' + pl.RawMat + '-' + pl.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) AS KeyAMIL
|
|
, dd.CodDiesGroup
|
|
, id.CodItemGroup + '-' + pl.RawMat AS KeyAM
|
|
, id.CodItemGroup, pl.RawMat, pl.CodPlant, dd.HoleNum
|
|
, 0 AS NumSMED -- numero cambi, da sistemare...
|
|
, SUM(QtyOUT) AS KgTeorici
|
|
, SUM(QtyIN) AS KgLordi
|
|
, SUM(Duration) AS Durata
|
|
FROM ProductionLog pl INNER JOIN DiesDet dd ON pl.CodDies=dd.CodDies
|
|
INNER JOIN ItemDet id ON dd.CodItem = id.CodItem
|
|
WHERE pl.ProcessNum='01' and pl.EventType=1
|
|
AND pl.okPr = 1 AND pl.okSc = 1
|
|
AND pl.EventStart BETWEEN @dateFrom AND @dateTo
|
|
GROUP BY id.CodItemGroup, pl.RawMat, dd.CodDiesGroup, pl.CodPlant, dd.HoleNum
|
|
ORDER BY id.CodItemGroup, pl.RawMat, dd.CodDiesGroup, SUM(QtyOUT) DESC
|
|
|
|
|
|
-- calcolo cambi SMED
|
|
|
|
-- con cte
|
|
; WITH cteCambiPre
|
|
AS
|
|
(
|
|
SELECT
|
|
ROW_NUMBER() OVER(ORDER BY CodPlant, EventStart ASC) AS Row,
|
|
CodPlant, RawMat, EventStart, ProcessNum, CodDies, CodClient, OrderNum, BatchNum
|
|
FROM ProductionLog pl
|
|
WHERE pl.ProcessNum='01' and pl.EventType=1
|
|
AND pl.okPr = 1 AND pl.okSc = 1
|
|
AND pl.EventStart BETWEEN @dateFrom AND @dateTo
|
|
)
|
|
, cteCambi
|
|
AS
|
|
(
|
|
-- PARTE AMIL
|
|
SELECT dd.CodItem + '-' + a.RawMat + '-' + a.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL
|
|
, dd.CodDiesGroup
|
|
, a.*
|
|
--, b.Row
|
|
--, ISNULL(b.Row, 0) AS Cambio -- se 0 c'è cambio
|
|
--, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2
|
|
, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2
|
|
FROM cteCambiPre AS a
|
|
LEFT JOIN cteCambiPre AS b
|
|
ON a.Row-1 = b.Row
|
|
AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies
|
|
INNER JOIN DiesDet dd ON a.CodDies=dd.CodDies
|
|
WHERE b.Row IS NULL -- se voglio vedere solo i cambi
|
|
--ORDER BY a.CodPlant, a.EventStart
|
|
|
|
UNION
|
|
-- PARTE CMIL
|
|
SELECT id.CodItemGroup + '-' + a.RawMat + '-' + a.CodPlant + '-' + CAST(dd.HoleNum AS NVARCHAR(19)) as KeyAMIL
|
|
, dd.CodDiesGroup
|
|
, a.*
|
|
--, b.Row
|
|
--, ISNULL(b.Row, 0) AS Cambio -- se 0 c'è cambio
|
|
--, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2
|
|
, CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2
|
|
FROM cteCambiPre AS a
|
|
LEFT JOIN cteCambiPre AS b
|
|
ON a.Row-1 = b.Row
|
|
AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies
|
|
INNER JOIN DiesDet dd ON a.CodDies=dd.CodDies
|
|
INNER JOIN ItemDet id ON dd.CodItem = id.CodItem
|
|
WHERE b.Row IS NULL -- se voglio vedere solo i cambi
|
|
--ORDER BY a.CodPlant, a.EventStart
|
|
)
|
|
UPDATE tps
|
|
SET NumSMED = cc.NumSMED
|
|
FROM TabProdSc tps
|
|
INNER JOIN (
|
|
SELECT KeyAMIL, CodDiesGroup, SUM(Cambio2) as NumSMED
|
|
FROM cteCambi
|
|
GROUP BY KeyAMIL, CodDiesGroup
|
|
--ORDER BY KeyAMIL, CodDiesGroup
|
|
) AS cc
|
|
ON tps.KeyAMIL= cc.KeyAMIL AND tps.CodDiesGroup = cc.CodDiesGroup
|
|
|
|
|
|
|
|
-- -- altro metodo, forse + veloce...
|
|
-- DROP TABLE test
|
|
|
|
-- CREATE TABLE [dbo].[test](
|
|
-- [Row] [bigint] IDENTITY(1,1) NOT NULL,
|
|
-- [CodPlant] [nvarchar](50) NOT NULL,
|
|
-- [EventStart] [datetime] NOT NULL,
|
|
-- [ProcessNum] [nvarchar](50) NOT NULL,
|
|
-- [CodDies] [nvarchar](50) NOT NULL,
|
|
-- [CodClient] [nvarchar](50) NOT NULL,
|
|
-- [OrderNum] [nvarchar](50) NOT NULL,
|
|
-- [BatchNum] [nvarchar](50) NOT NULL,
|
|
-- CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
|
|
-- (
|
|
-- [Row] ASC
|
|
-- )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
|
|
-- ) ON [PRIMARY]
|
|
|
|
|
|
-- INSERT INTO TEST
|
|
-- SELECT CodPlant, EventStart, ProcessNum, CodDies, CodClient, OrderNum, BatchNum
|
|
-- FROM ProductionLog pl
|
|
-- WHERE pl.ProcessNum='01' and pl.EventType=1
|
|
-- ORDER BY CodPlant, EventStart
|
|
|
|
---- SELECT * FROM Test
|
|
|
|
-- SELECT a.*
|
|
-- , b.Row
|
|
-- , ISNULL(b.Row, 0) AS Cambio -- se 0 c'è cambio
|
|
-- , CASE ISNULL(b.Row, 0) WHEN 0 THEN 1 ELSE 0 END AS Cambio2
|
|
-- FROM test AS a
|
|
-- LEFT JOIN test AS b
|
|
-- ON a.Row - 1 = b.Row -- aggancio record precedente
|
|
-- AND a.CodPlant = b.CodPlant AND a.CodDies = b.CodDies
|
|
-- WHERE b.Row IS NULL -- solo i cambi
|
|
-- ORDER BY a.CodPlant, a.EventStart
|
|
|
|
|
|
|
|
-- salvo nuova revisione dati di produzione...
|
|
INSERT INTO RevHistory
|
|
SELECT 'P', ISNULL(MAX(RevNum),0) + 1, GETDATE(), 'Aggiornamento dati di produzione fase 01 ' + CONVERT(NVARCHAR(20), @dateFrom, 120) + ' --> ' +CONVERT(NVARCHAR(20), @dateTo, 120)
|
|
FROM RevHistory
|
|
WHERE RevType = 'P'
|
|
|
|
COMMIT TRAN
|
|
|
|
END
|