COME SOMMARE DA TABELLE DIVERSE

giovedì 12 ottobre 2006 - 11.37

Emilia Profilo | Newbie

Ciao Ragazzi, ho un problema sulle somme in un DB ACCESS.

Ho 3 tabelle contenenti costi (Tabella_Assicurazione, Tabella_Ammortamento, Tabella_Gasolio).

In tutte e 3 c'è il campo IMPORTI in cui vengono memorizzati gli importi del costo.

Vorrei avere la SOMMA TOTALE degli IMPORTI di tutte e tre le tabelle.

La soluzione più semplice sarebbe fare 3 query che effettuano le somme degli importi di ogni tabella e una quarta che effettua la somma delle altre 3 query.

Come posso fare ad avere la SOMMA TOTALE in un'unica QUERY?

micto27 Profilo | Senior Member

>Ciao Ragazzi, ho un problema sulle somme in un DB ACCESS.
>
>Ho 3 tabelle contenenti costi (Tabella_Assicurazione, Tabella_Ammortamento,
>Tabella_Gasolio).
>
>In tutte e 3 c'è il campo IMPORTI in cui vengono memorizzati
>gli importi del costo.
>
>Vorrei avere la SOMMA TOTALE degli IMPORTI di tutte e tre le
>tabelle.
>
>La soluzione più semplice sarebbe fare 3 query che effettuano
>le somme degli importi di ogni tabella e una quarta che effettua
>la somma delle altre 3 query.
>
>Come posso fare ad avere la SOMMA TOTALE in un'unica QUERY?
>

Puoi definire una query che esegue la "UNION ALL" delle 3 tabelle e su questa query esegui poi
la somma.

Ciao, Michele

lbenaglia Profilo | Guru

>Ho 3 tabelle contenenti costi (Tabella_Assicurazione, Tabella_Ammortamento,
>Tabella_Gasolio).

Ciao Emilia,

come vedi questo forum è dedicato a diversi DBMS, quindi per ricevere una risposta precisa alla tua domanda dovresti come prima cosa dirci quale DBMS stai utilizzando.
Inoltre sarebbe molto utile (e spesso indispensabile) avere i comandi DDL delle tabelle, alcune righe di prova (INSERT INTO) ed il result set finale che si vuole ottenere.

Ma ora veniamo a noi
Sia Access che SQL Server dispongono dell'operatore UNION [ALL] che permette di combinare i result set di più query.
L'esempio che ti propongo è stato preparato in SQL Server 2005:

USE tempdb; GO CREATE TABLE dbo.Assicurazione( AssicurazioneID int NOT NULL IDENTITY PRIMARY KEY, Importo smallmoney NOT NULL ); GO CREATE TABLE dbo.Ammortamento( AmmortamentoID int NOT NULL IDENTITY PRIMARY KEY, Importo smallmoney NOT NULL ); GO CREATE TABLE dbo.Gasolio( GasolioID int NOT NULL IDENTITY PRIMARY KEY, Importo smallmoney NOT NULL ); GO INSERT dbo.Assicurazione VALUES(10); INSERT dbo.Assicurazione VALUES(20); INSERT dbo.Assicurazione VALUES(30); INSERT dbo.Ammortamento VALUES(100); INSERT dbo.Ammortamento VALUES(200); INSERT dbo.Ammortamento VALUES(300); INSERT dbo.Gasolio VALUES(1000); INSERT dbo.Gasolio VALUES(2000); INSERT dbo.Gasolio VALUES(3000); GO /* Esempio funzionante in Access/SQL Sever 7.0 - 2000 */ SELECT SUM(Q.Importo) AS ImportoTotale FROM ( SELECT Importo FROM dbo.Assicurazione UNION ALL SELECT Importo FROM dbo.Ammortamento UNION ALL SELECT Importo FROM dbo.Gasolio ) AS Q GO /* Output: ImportoTotale --------------------- 6660,00 (1 row(s) affected) */ /* Se utilizzi SQL Server 2005 puoi ricorrere ad una CTE */ WITH Importi(Importo) AS ( SELECT Importo FROM dbo.Assicurazione UNION ALL SELECT Importo FROM dbo.Ammortamento UNION ALL SELECT Importo FROM dbo.Gasolio ) SELECT SUM(Importo) AS ImportoTotale FROM Importi; GO /* Output: ImportoTotale --------------------- 6660,00 (1 row(s) affected) */ DROP TABLE dbo.Assicurazione, dbo.Ammortamento, dbo.Gasolio

Maggiori dettagli li trovi sui Books Online:

"UNION (Transact-SQL)"
http://msdn2.microsoft.com/it-it/library/ms180026.aspx

"WITH common_table_expression (Transact-SQL)"
http://msdn2.microsoft.com/it-it/library/ms175972.aspx

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Emilia Profilo | Newbie

Grazie Mille sei stato gentilissimo e mi hai risolto il problema. A Presto

grancati Profilo | Newbie

Ciao Emilia

visto che il db è di access puoi fare anche così
----
SELECT Dsum('Importi','Tabella_Assicurazione')+
Dsum('Importi','Tabella_Ammortamento')+
Dsum('Importi','Tabella_Gasolio') AS Totale;
----

eventualmente controlla i valori null nel caso che una o più tabelle siano vuote.

Ciao
Giorgio
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5