Capita spesso di dover estrapolare dati aggregati del tipo:
SELECT Prodotti.Codice, SUM(Quantita) as QuantitaVenduta
FROM RigheOrdini
JOIN Prodotti ON RigheOrdini.IDProdotto = Prodotti.ID
Group By Prodotti.Codice
Order by Prodotti.Codice
e di dover aggiungere altre informazioni nella Select. La soluzione è:
SELECT Prodotti.Codice, Prodotti.Nome, Vendite.QuantitaVenduta
FROM Prodotti
JOIN (SELECT IDProdotto, SUM(Quantita) as QuantitaVenduta
FROM RigheOrdini
Group By IDProdotto) as Vendite
ON Prodotti.ID = Vendite.IDProdotto
Order by Prodotti.Codice
Altra questione interessante è che è generalmente più performante:
SELECT Clienti.Nome, Clienti.Cognome, Clienti.Regione
FROM Clienti
WHERE EXISTS (SELECT * FROM BaseCamp WHERE BaseCamp.Regione = Clienti.Regione)
ORDER BY Clienti.Cognome, Clienti.Nome
invece che:
SELECT DISTINCT Clienti.Nome, Clienti.Cognome, Clienti.Regione
FROM Clienti
INNER JOIN BaseCamp on BaseCamp.Regione = Clienti.Regione
ORDER BY Clienti.Cognome, Clienti.Nome
Technorati tags:
Sql Server