Cerca

Trucco per aggirare le aggregazioni durante un UPDATE in SQL Server

Indice Articolo

Ultimi articoli pubblicati

Capita spesso di dover fare una UPDATE su una tabella SQL in cui vengano coinvolte delle aggregazioni. L’altro giorno dovevo fare un UPDATE su una tabella ed inserire il COUNT delle righe di un altra SELECT su una altra tabella. La prima cosa prova è stata nel scrivere la mia query in questo modo:

UPDATE     Tabella1
SET Tabella1.Campo2 = Count (*)
FROM Tabella1 INNER JOIN Tabella2 ON Tabella1.Campo1 = Tabella2.Campo1
WHERE <condizione>
Eseguendo questa query SQL restituisce un errore di questo genere: Non si può visualizzare un’aggregazione nell’elenco impostato di un’istruzione UPDATE. Cioè SLQ server non accetta le aggregazioni su una istruzione di UPDATE. A questo punto mi sono messo a cercare una soluzione al mio problema. La soluzione è questa:

UPDATE Tabella1
SET Tabella1.Campo2 = Temp.Contatore
FROM Tabella1 INNER JOIN
(
SELECT COUNT (*) AS Contatore, Tabella2.Campo1
FROM Tabella2
WHERE <condizione>
) AS Temp
ON Tabella1.Campo1 = Temp.Campo1

Allora il trucco sta nel appoggiarsi ad una tabella temporanea che si crea da una select sulla tabella su cui dobbiamo fare il COUNT. Sulla SELECT interna dove andiamo a fare il COUNT, bisogna restituire tutti i valori su cui andiamo a fare il JOIN poi sotto con la nostra tabella principale.

Dato che la mia condizione di join in questo caso prevedeva soltanto una condizione (Tabella1.Campo1 = Temp.Campo1) allora io sulla select interna oltre al contatore che mi serve sul SET ho fatto restituire anche il campo Tabella2.Campo1 per fare il JOIN.

Spero che questa cosa vi torni utile come è tornata a me.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *