Torna al Thread
USE tempdb;
GO
CREATE TABLE #tab_prodotti_quantita
(
articolo_composto nvarchar(10) NOT NULL
, articolo_componente int NOT NULL
, quantita_componente int NOT NULL
);
GO
CREATE TABLE #tab_prodotti_prezzi
(
codice_padre_prezzo int NOT NULL
, quantita_prezzo decimal(18, 2) NOT NULL
);
GO
INSERT INTO #tab_prodotti_quantita (articolo_composto, articolo_componente, quantita_componente)
VALUES
('UNO', 1, 10)
, ('DUE', 2, 20)
, ('TRE', 3, 3)
, ('TRE', 3, 30)
, ('TRE', 3, 33)
, ('QUATTRO', 4, 40)
, ('QUATTRO', 4, 400)
, ('QUATTRO', 4, 4000)
, ('CINQUE', 5, 50);
GO
INSERT INTO #tab_prodotti_prezzi (codice_padre_prezzo, quantita_prezzo)
VALUES
(1, 100)
, (2, 200)
, (3, 300)
, (4, 400)
, (5, 500);
GO
CREATE PROCEDURE dbo.proc_ValutaMinimoAcquistabile
@articolo_composto nvarchar(10)
, @MinimoAcquistabile int = 0 OUT
AS
BEGIN
SET NOCOUNT ON;
SET @MinimoAcquistabile = 0;
-- caso "INTERROMPI" - basta che un elemento abbia QuantitaGiacenza < QuantitaMinima, torno @MinimoAcquistabile = 0
IF EXISTS(SELECT 1
FROM
#tab_prodotti_prezzi P
JOIN #tab_prodotti_quantita Q ON P.codice_padre_prezzo = Q.articolo_componente
WHERE
Q.articolo_composto = @articolo_composto
AND P.quantita_prezzo < Q.quantita_componente)
RETURN;
-- dividendi (solo dove QuantitaGiacenza >= QuantitaMinima)
SELECT
ValoreDivisione = P.quantita_prezzo / Q.quantita_componente
INTO #temp_dividendi --> popolo i dividendi, se ci sono
FROM
#tab_prodotti_prezzi P
JOIN #tab_prodotti_quantita Q ON P.codice_padre_prezzo = Q.articolo_componente
WHERE
Q.articolo_composto = @articolo_composto
AND P.quantita_prezzo >= Q.quantita_componente;
IF @@ROWCOUNT = 0
RETURN;
SELECT
@MinimoAcquistabile = MIN(ValoreDivisione)
FROM
#temp_dividendi;
END
GO
-- EXECUTE (INTERROTTO)
DECLARE @m int;
EXEC dbo.proc_ValutaMinimoAcquistabile
@articolo_composto = 'QUATTRO'
, @MinimoAcquistabile = @m out;
SELECT 'Minimo Acquistabile' = @m;
GO
--
-- EXECUTE (CON MINIMO)
DECLARE @m int;
EXEC dbo.proc_ValutaMinimoAcquistabile
@articolo_composto = 'TRE'
, @MinimoAcquistabile = @m out;
SELECT 'Minimo Acquistabile' = @m;
GO
--
DROP PROCEDURE dbo.proc_ValutaMinimoAcquistabile;
GO
DROP TABLE #tab_prodotti_prezzi;
GO
DROP TABLE #tab_prodotti_quantita;
GO