Torna al Thread
SET NOCOUNT ON;
GO
USE tempdb;
GO
CREATE TABLE Tabella1 (
ID INT IDENTITY(1, 1) NOT NULL,
CODARTICOLO NCHAR (025) COLLATE Database_Default NULL,
QTAARTICOLO DECIMAL (09,3) NULL,
LOTTO NCHAR (025) COLLATE Database_Default NULL,
SCADENZA DATETIME NULL,
QTALOTTO DECIMAL (09,3) NULL,
CONSTRAINT PK_TAB1 PRIMARY KEY CLUSTERED
(ID ASC) WITH FILLFACTOR = 85 ON [PRIMARY]) ON [PRIMARY]
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART1', 2, 'LOTTOA1-A', '2022-12-25', 2)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART1', 1, 'LOTTOA1-B', '2023-12-25', 1)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART1', 1, 'LOTTOA1-C', '2021-01-02', 1)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART2', 2, 'LOTTOA2-X', '2020-01-15', 2)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART2', 3, 'LOTTOA2-Y', '2024-05-04', 3)
GO
SELECT * FROM Tabella1
GO
PRINT 'UPDATE con estensione T-SQL di JOIN';
WITH cte AS (
SELECT t.CODARTICOLO, SUM(t.QTAARTICOLO) AS qt
FROM Tabella1 t
GROUP BY t.CODARTICOLO
)
UPDATE Tabella1
SET QTAARTICOLO = c.qt
FROM Tabella1 t
JOIN cte c ON c.CODARTICOLO = t.CODARTICOLO;
GO
SELECT * FROM Tabella1;
GO
TRUNCATE TABLE Tabella1;
GO
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART1', 2, 'LOTTOA1-A', '2022-12-25', 2)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART1', 1, 'LOTTOA1-B', '2023-12-25', 1)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART1', 1, 'LOTTOA1-C', '2021-01-02', 1)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART2', 2, 'LOTTOA2-X', '2020-01-15', 2)
INSERT INTO Tabella1 (CODARTICOLO, QTAARTICOLO, LOTTO, SCADENZA, QTALOTTO) VALUES ('ART2', 3, 'LOTTOA2-Y', '2024-05-04', 3)
GO
SELECT * FROM Tabella1;
GO
PRINT 'UPDATE con MERGE';
MERGE Tabella1 AS target
USING (SELECT t.CODARTICOLO, SUM(t.QTAARTICOLO) AS qt
FROM Tabella1 t
GROUP BY t.CODARTICOLO
) AS source
ON (target.CODARTICOLO= source.CODARTICOLO)
WHEN MATCHED THEN
UPDATE SET QTAARTICOLO = source.qt;
GO
SELECT * FROM Tabella1;
GO
DROP TABLE Tabella1;