Newsgroup: it.comp.appl.access
Titolo: Query raddoppia dato singolo..qualcuno mi spiega perchè?

Ciao ragazzi,
vi scrivo solo per avere un chiarimento su una query che sono riuscita poi a scrivere
correttamente, ma che nella parte sbagliata mi fa sorridere...se non fosse che non ne
comprendo appieno il perchè.
Avevo fatto una query di prova di questo tipo (metto dei valori fittizi per farvi capire cosa succede:
tblAzienda.Gennaio= valore 1.000 +
tblProject.PropGennaio = (tblProject.PropGennaio (1000) x tblAzienda.Perc=60%)= 600
Ebbene; con questa query
Sum(Nz(([Azienda].[Gennaio]))+(Nz([PropGennaio]/100*[Perc]))) AS ProjectGennaio
mi da come risultato 2.600 al posto di 1.600 !!
(Notare che nel campo tblAzienda.Gennaio c'è un solo record con un solo valore.
Poi ho risolto così
(Nz(Azienda.Gennaio))+ Sum(Nz([PropGennaio]/100*[Perc])) AS ProjectGennaio
e mi da correttamente il valore 1.600.
Al di la del fatto di aver risolto , non capisco.
Come fa Sum a duplicarmi un singolo valore???? Se dico Sum( Gennaio) e Gennaio ha un solo valore
cosa fa, lo somma a se stesso?
E come mai solo nella prima tabella? Se Sum messo in quel modo duplicasse tutto, avrebbe dovuto
duplicare anche il campo della seconda tabella e quindi restituirmi non 2.600, ma 3.200.
Non capisco
Qualcuno mi illumina?
Grazie e buona giornata a chi legge
Cristina

 Cristina
Ciao Cristina,
bisognerebbe vedere la query per intero perchč cosě non si capisce 
molto, posso solo dedurre che tra tblAzienda e tblProject c'č una 
relazione 1 a molti, probabilmente il criterio di  JOIN che hai usato 
fa si che alla stessa Azienda corrisponda piů di un progetto, per cui 
probabilmente avevi una situazione di questo tipo:
Azienda.Gennaio    Azienda.Perc         Project.PropGennaio
1000                      60                                    1000
1000                       60                                  0
Sommando con la prima formula ottieni 2600 con la seconda formula che 
hai usato 1600
Togli il raggruppamento (somma) dalla query e vedi quante volte si 
duplica la riga Azienda cosě ti renderai conto se per evitare questo 
duplicamento devi aggiungere qualche condizione al JOIN o alla 
clausola Where.
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
http://accessdaziacin.live.spaces.com
---------------------------------------- 

 
Ciao Cinzia,
grazie della risposta.
E' esattamente il contrario:
  tblAzienda.Gennaio    tblPogress.Gennaio         Perc
   1000 (1 record)        1000 (1° record)          40
                          1000 (2° record)          20
Quindi:
tblAzienda.Gennaio    ExptblProgress.Gennaio       Tot
  1000                    600		         1.600
Ma se metto il sum su tblAzienda.Gennaio, nonostante sia un solo record, mi restituisce 2.000
Questo il codice per intero..quello che funziona
La tblProgress è in relazione uno-molti con tblAzienda
SELECT Azienda.Cliente, Azienda.Gennaio, Azienda.Febbraio, Progress.Cliente, Progress.Attività,(Nz(Azienda.Gennaio))
+Sum([AdvGennaio]/100*[Perc]) AS ProjectGennaio,FROM Progress, Azienda
GROUP BY Azienda.Cliente, Azienda.Gennaio, Azienda.Febbraio, Progress.Cliente, Progress.Attività
HAVING (((Progress.Cliente)=Azienda.cliente) And ((Progress.Attività)="proposta"));
Ma forse ho capito il perchè dello strano comportamento:
La persona che mi ha dato questo db (da excel) ha involontariamente e parzialmente duplicato
il record in oggetto: 1) Pippo Franco; 2)Pippo Franco Automobili Srl
Quindi, non avendo inserito per il momento un IDCliente univoco (è ancora tutto da sistemare) ed
appoggiandomi al HAVING, probabilmente ha duplicato il valore 1.000 che avevo assegnatto a "Pippo Franco".
Che ne pensi ?
Ciao
Cristina

 ha scritto nel messaggio 
news:Amtek.26473$Ca.1...@twister2.libero.it...

Ciao Cristina,
non credo sia questo il problema  la condizione è 
Progress.Cliente=Azienda.Cliente e "Pippo Franco"  non può essere 
uguale a "Pippo franco Automobili" !
Prova ad eseguire questa query:
SELECT Azienda.Cliente, Azienda.Gennaio, Azienda.Febbraio, 
Progress.Cliente, Progress.Attività,  nz(Azienda.Gennaio) as Jan, 
AdvGennaio]/100*[Perc] AS ProjectGennaio FROM Progress, Azienda
Where (((Progress.Cliente)=Azienda.cliente) And 
((Progress.Attività)="proposta"))  ORDER BY Azienda.Cliente, 
Azienda.Gennaio, Azienda.Febbraio, Progress.Cliente, Progress.Attività
e poi questa:
SELECT Azienda.Cliente, Azienda.Gennaio, Azienda.Febbraio, 
Progress.Cliente, Progress.Attività,  nz(Azienda.Gennaio) as Jan, 
AdvGennaio]/100*[Perc] AS ProjectGennaio FROM Progress INNER JOIN 
Azienda On Progress.Cliente = Azienda.Cliente
Where   Progress.Attività ="proposta"  ORDER BY Azienda.Cliente, 
Azienda.Gennaio, Azienda.Febbraio, Progress.Cliente, Progress.Attività
e verifica quante righe hai per l'azienda Pippo Franco in entrambe le 
situazioni, dovresti così riuscire a capire il motivo dell'errore.
