Update Intervallo di record da Select

venerdì 02 marzo 2018 - 14.35

fotw Profilo | Newbie

Un saluto a tutti,
ho un problema con una UPDATE che deve aggiornare una serire di Records con il risultato di una SELECT sulla stessa tabella.

Riporto di seguito uno SCRIPTS per ricreare la situazione ed il risultato che vorrei

--DROP TABLE Tabella1
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)


SELECT CODARTICOLO, SUM(QTALOTTO) AS SUMQTAART, MIN(ID) AS MinID, MAX(ID) AS MaxID
FROM Tabella1
GROUP BY CODARTICOLO
UPDATE Tabella1 SET QTAARTICOLO = 4 WHERE ID BETWEEN 1 AND 3 -->ID minimo e massimo dello stesso articolo
UPDATE Tabella1 SET QTAARTICOLO = 5 WHERE ID BETWEEN 4 AND 5

/* Di seguito il risultato che vorrei*/
SELECT * FROM Tabella1


Come faccio tramite una UPDATE ad aggiornare la colonna QTAARTICOLO con la somma di tutte le righe con lo stesso articolo,
su tutti gli ID dello stesso articolo?
La SELECT sopra mi restituisce la somma e l'intervallo degli ID che devo aggiornare ma...dopo mi blocco

Un grazie mille in anticipo e buon fine settimana a tutti

Spero di essere stato chiaro

fg

amontanari Profilo | Newbie

>Un saluto a tutti,
>...
>Come faccio tramite una UPDATE ad aggiornare la colonna QTAARTICOLO
>con la somma di tutte le righe con lo stesso articolo,
>su tutti gli ID dello stesso articolo?
>La SELECT sopra mi restituisce la somma e l'intervallo degli
>ID che devo aggiornare ma...dopo mi blocco
>

salve,
NON che abbia molto senso...
la proprieta' [quantita'] e' ripetuta per ogni riga, con riferimenti temporali diversi, e anche lotti diversi.... potrei capire un "running total", cioe' un valore che ad ogni data diversa aggiunga/sottragga qualche cosa per avere un riferimento corrente della disponibilita', ma cosi' come richiesto, non mi pare molto sensato...
comunque, puoi usare una common table expression per ottenere il valore di raggruppamento e quindi utilizzarla con la estensione del comando UPDATE di T-SQL con supporto di JOIN (https://docs.microsoft.com/it-it/sql/t-sql/queries/update-transact-sql), oppure con un piu' nuovo comando MERGE (https://docs.microsoft.com/it-it/sql/t-sql/statements/merge-transact-sql)
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


--
Andrea Montanari
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2018
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5