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;
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5