Files
StockMan/DbBackup/stp_ItemShrinkHist.sql
T
2016-09-29 23:47:10 +02:00

72 lines
1.5 KiB
Transact-SQL

USE [StockMan]
GO
/****** Object: StoredProcedure [dbo].[stp_ItemShrinkHist] Script Date: 29/09/2016 23:44:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: S.E.L.
-- Create date: 2016.09.21
-- Description: Riduce i movimenti per una data locazione-item (nulli, oppure a somma nulla a pari giorno)
-- =============================================
CREATE PROCEDURE [dbo].[stp_ItemShrinkHist]
(
@ItemID INT = 0
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN tran
-- elimino in primis i movimenti nulli...
DELETE
FROM ItemFlux
WHERE Qta = 0
AND ItemID = @ItemID
-- cerco movimenti di un item solo positivi o solo negativi
;WITH cteAdd AS
(
SELECT *
FROM ItemFlux
WHERE Qta > 0
AND ItemID = @ItemID
), cteRem AS
(
SELECT *
FROM ItemFlux
WHERE Qta < 0
AND ItemID = @ItemID
)
-- li incrocio e se si annullano..
, cteNull AS
(
SELECT a.*
FROM cteAdd a INNER JOIN cteRem r
ON a.LocationID=r.LocationID
AND a.dtMov = r.dtMov
AND ABS(a.Qta) = ABS(r.Qta)
)
--select * from cteNull
-- ora che li ho selezionati li elimino...
DELETE iflx
FROM ItemFlux iflx INNER JOIN cteNull cte
ON iflx.LocationID = cte.LocationID
AND iflx.ItemID = cte.ItemID
AND iflx.dtMov = cte.dtMov
WHERE ABS(iflx.Qta) = ABS(cte.Qta)
COMMIT tran
END
GO