ancora su Sql Server

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:

 

Print | posted @ domenica 22 gennaio 2012 00:56

Comments have been closed on this topic.