Newsgroup: it.comp.lang.visual-basic
Titolo: Difficoltà con una query

Salve a tutti.
Mi sto costruendo un piccolo programmino per tenere traccia delle entrate e
delle uscite di $, mi baso su di un database access e va tutto bene, ma ho
solo un piccolo problema con il riepilogo... Mi spiego meglio con un
esempio:
ho le seguenti tabelle
ENTRATE:
Data             Importo
05/05/2004     130
07/05/2004     1100
08/05/2004     25
USCITE:
Data             Importo
07/05/2004     19
08/05/2004     44,7
09/05/2004     3
13/05/2004     3,3
La query risultante dovrà essere:
SALDO
Data             importo
05/05/2004     130
07/05/2004     1100 - 19
08/05/2004     25 - 44,7
09/05/2004     -3
13/05/2004     -3,3
L'SQL che ho scritto io è:
SELECT riepilogoentrate.importo - riepilogouscite.importo AS Saldo,
riepilogoentrate.Data, riepilogouscite.Data
FROM riepilogoentrate, riepilogouscite;
e mi restituisce la differenza tral'importo di OGNI record di ENTRATE e OGNI
record di USCITE... in questo esempio quindi mi avrebbe restituito 12
recordo.
Se aggiungo la clausola WHERE riepilogoentrate.data=riepilogouscite.data;
ovviamente mi restituisce solo i record che hanno data uguale, quindi, in
questo esempio, avrei solo
07/05/2004     1100 - 19
08/05/2004     25 - 44,7
....
Come fare?
Grazie mille a tutti per l'aiuto!

"Paolo C.":
| [cut]
| Come fare?
Studia un po' il "GROUP BY".
-- 
52+36
Difendi anche tu la liberta` di scegliere il ricevitore satellitare.
Leggi i dettagli qui:
http://luckyluciano.altervista.org/lettera_garante.html
https://hi-cad.homelinux.org/ihstdm-faq/tiki-index.php?page=ListaDelleFaq

Si, conosco l'utilizzo del group by, ma non riesco ad applicarlo, in quanto
non riesco a individuare la funzione di aggregazione...
Se glielo scrivo cosě
SELECT riepilogoentrate.[somma di entrate_importo]-riepilogouscite.importo
AS Saldo, riepilogoentrate.Data, riepilogouscite.Data
FROM riepilogoentrate, riepilogouscite
GROUP BY riepilogoentrate.data
ovviamente mi restituisce un errore:
Impossibile eseguire una query che non include l'espressione
"riepilogoentrate.[somma di entrate_importo]-riepilogouscite.importo"
specificata come parte di una fuzione di aggregazione.
Mi sono arenato qui...
Grazie comunque dell'aiuto, buona giornata a tutti!

 esempio:
[snipped]
Ti propongo 2 soluzioni.
1) Ci sono le entrate e le uscite divise su due colonne diverse ed utilizza
una sola query, il saldo te lo devi calcolare tu sul recordset che estrai
PARAMETERS iData DateTime, fData DateTime;
SELECT  Entrate.data AS DataOperazione, SUM(Entrate.importo) AS Entrate, 0
As Uscite  FROM Entrate
where entrate.data between [idata] and [fdata]
GROUP BY entrate.data
UNION ALL SELECT  Uscite.Data AS DataOperazione, 0 AS Entrate,
SUM(Uscite.Importo) AS Uscite FROM Uscite
WHERE uscite.data between [iData] and [fData]
GROUP BY uscite.data
ORDER BY DataOperazione;
2) Query che estrae dare, avere, saldo ma utilizza una subquery (quindi sono
2 query correlate)
2.1 (prima query o subquery salvata come QDate): SELECT entrate.data FROM
entrate GROUP BY Entrate.data UNION ALL Select uscite.data FROM uscite GROUP
BY uscite.data;
2.2 Seconda query - principale
SELECT QDate.data,
Sum(IIf(IsNull([Entrate].[Importo]),0,[Entrate].[Importo])) AS Dare,
Sum(IIf(IsNull([uscite].[importo]),0,[Uscite].[importo])) AS Avere,
[Dare]-[Avere] AS Saldo
FROM (QDate LEFT JOIN Entrate ON QDate.data = Entrate.Data) LEFT JOIN Uscite
ON QDate.data = Uscite.Data
GROUP BY QDate.data;

La cosa funziona, ci ho messo un bel po per capirla, ma mi piace... sto
parlando della seconda soluzione...
Solo che i dati restituiti sono veritieri solo in parte, poichè mi risulta
che entrate e uscite sono il doppio ...
Ad esempio, per il 5 maggio mi sono entrati 130 e usciti 15 euro, la query
mi restitusce 260 euro entrati e 30 usciti.
Non riesco però a capire dove sia la doppia somma....
Grazie mille per l'aiuto comunque

 ha scritto nel messaggio
news:xOGrc.4249$G%.1627@tornado.fastwebnet.it...

Della seconda non me ne ero accorto (presto e bene non vanno d'accordo)
rimedio:
query1 (salvata come qdate1)
SELECT  Entrate.data AS DataOperazione, SUM(Entrate.importo) AS Entrate, 0
As Uscite  FROM Entrate
GROUP BY entrate.data
UNION ALL SELECT  Uscite.Data AS DataOperazione, 0 AS Entrate,
SUM(Uscite.Importo) AS Uscite FROM Uscite
GROUP BY uscite.data
ORDER BY DataOperazione;
Query 2 che richiama la 1
SELECT QDate1.DataOperazione, Sum(QDate1.Entrate) AS SommaDiEntrate,
Sum(QDate1.Uscite) AS SommaDiUscite, Sum(([entrate]-[uscite])) AS Totale
FROM QDate1
GROUP BY QDate1.DataOperazione;

Perfetto!
Grazie...
Avevo pensato a questa soluzione, ma non conoscevo l'esistenza del comando
Union...
Grazie ancora...