Newsgroup: it.comp.lang.delphi
Titolo: Query con tre tabelle

E' una query semplice quella che faccio, ma sbaglia il risultato. 
Praticamente interrogo tre dataset:
- il primo estrae dati secondo certi criteri, raggruppando il valore del 
campo Importo come indicato dal GroupBy
- dal secondo, a parità di codice banca, prelevo la descrizione 
dell'Istituto
- dal terzo, sempre a parità di codice banca, prelevo il saldo di inizio 
anno
 
In pratica la mia select è la seguente:
 
stringaSelect:= 'Select BANCA as Conto, B."Descrizion" as Nome_del_conto, '+
'sum(IMPORTO) as Totale_Anni, '+
'S."saldo_ia" +sum(IMPORTO) as Saldo_Calcolato '+
'from MOVIM M '+
'join BYTD B ON M."banca" = B."banca" '+
'join StoricoSaldiB S ON B."banca" = S."banca" '+
' where (M."BANCA" = '+ QuotedStr(cBanca) + ') and  '+
'(M."AA") BETWEEN '+ QuotedStr(EdDaAnno.Text) +' and '+ 
QuotedStr(EdAdAnno.Text)+' '+strGroupBy;
 
Il risultato è che il risultato raddoppia: Praticamente estrae lo stesso 
record due volte.
Si, uso il BDE (ancora). C'è qualcuno che nonostante questo mi può aiutare ?
 
 
---
Questa e-mail è priva di virus e malware perché è attiva la protezione avast! Antivirus.
http://www.avast.com
 
 

Ciao Stark,
 
S> E' una query semplice quella che faccio, ma sbaglia il risultato.
 
Premetto che senza aver chiara la struttura delle tabelle è difficile riuscire 
a darti una mano.
 
Prova a togliere i SUM ed il GROUP BY, vedrai che, se è vero che ti raddoppia 
i valori, gli stessi record li avrai due volte nel risultato.
 
Detto questo ti do un consiglio: usa i parametri e non costruire la sinstassi 
WHERE sommando le stringhe... Così facendo rischi la SQL Injection...
 
S> Si, uso il BDE (ancora). C'è qualcuno che nonostante questo mi può
S> aiutare ?
 
Il BDE è vecchiotto, non più supportato, ecc. ecc.... ma non credo sia sua 
la colpa :-)
 
HTH
David
 
 

Ciao Stark,
 
S> 'join StoricoSaldiB S ON B."banca" = S."banca" '+
 
Riguardandola un attimino meglio č probabile che hai dimenticato il campo 
anno nella Join con StoricoSaldiB... Potrebbe essere cosi?
 
JOIN StoricoSaldiB S ON B."banca" = S."banca" AND B."AA" = M."AA"
 
David
 
 

Ciao Stark,
S> 'join StoricoSaldiB S ON B."banca" = S."banca" '+
Riguardandola un attimino meglio è probabile che hai dimenticato il campo
anno nella Join con StoricoSaldiB... Potrebbe essere cosi?
JOIN StoricoSaldiB S ON B."banca" = S."banca" AND B."AA" = M."AA"
David
 
Ciao e grazie dell'aiuto. In effetti, togliendo il sum, estrae lo stesso 
record due volte. Senza addentrarmi nella struttura dei dataset, ti dirò 
solo che il primo è un dettaglio di movimenti contabili in cui il campo 
BANCA lo lega al secondo dataset dove per ogni BANCA c'è un solo record e lo 
lega anche al terzo dataset, in cui però per ogni BANCA potrebbero esserci 
enne records (mantiene saldi storici della BANCA).
 
Mi ha fatto pensare la tua osservazione sul campo Anno nella join. Pensavo 
di doverlo mettere nella where (dove il criterio dell'anno è infatti 
esplicitato) e di dover mettere nella join solo il campo che lega. Ma ora ci 
rifletto un pò su...


JOIN StoricoSaldiB S ON B."banca" = S."banca" AND B."AA" = M."AA"
David
 
Proprio così David! Avevi ragione in pieno: La seconda tabella richiedeva il 
criterio della banca e dell'anno.
Ora pare funzionare tutto. Grazie davvero. 
