Newsgroup: it.comp.appl.access
Titolo: Query di query da sql

Ho cercato sul NG ma nn sono riuscito a trovare niente di utile.
Ho bisogno di assegnare un valore ad una casella di testo.
Ho una tabella che mi contiene:
ID_anagrafico
Foglio catasto 
Particella catasto
Superficie totale (SAT)
SAU
il foglio e la particella possono essere uguali. Ove cio' accada la
SAT sara' uguale e la SAU varierą.
Io devo fare il totale di SAT.
Quindi devo fare una query per raggruppare per Foglio e Particella che
mi prende il Max di SAT (devo sommarlo una sola volta se ci sono piu'
fogli e particelle uguali) e devo fare una query per sommare i valori
ottenuti da questa query.
Ho fatto questa query ma l'unica cosa che mi fa e' fermarsi al primo
foglio e particella e prendermi il max di questa.
Set rs = CurrentDb.OpenRecordset(" SELECT [rif catastali].ID_ANAG, 
Max(nz([sup])) AS sup1 " & _
" FROM [rif catastali] GROUP BY [rif catastali].ID_ANAG, [rif
catastali].Foglio, [rif catastali].Particella, [rif catastali].Sub " &
_
" HAVING ((([rif catastali].ID_ANAG)=" & Forms!anagrafica!ID & "));",
dbReadOnly)
Teoricamente dovrebbe essere cosi' ma in realta' chi mi sa dire come
si fa?
Grazie mille

 dbReadOnly)
A parte che questa non è propriamente una query, direi che si ferma al primo
foglio a causa della clausola HAVING.
HTH.
Alessandro

 Grazie mille
Non č molto chiaro (almeno a me cosa tu voglia fare): se ti spieghi con un
esempio forse č piů facile comprendere cosa ti serve.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 esempio forse è più facile comprendere cosa ti serve.
Ho un archivio che mi contiene la ripartizione della superficie di una
azienda.
ID_ANAG e' il nominativo della persona a cui fanno capo le particelle
Foglio 
Particella
Identificano la zona 
SAT e' la superficie della particella considerata
Esiste poi un campo COLTURA che identifica la coltura effettuata su
quella particella
SAU identifica la SAU di quella particella
Se su una stessa particella si effettuano 2 colture il FOGLIO e
PARTICELLA risulteranno uguali in entrambe. La SAT risulterà uguale
perche' indica la grandezza di quella particella e la SAU sara'
diversa perche' indica quanta parte di quella particella e' destinata
a quella coltura.
A me serve sapere il totale della SAT. Premesso che, ove insistano 2
colture sullo stesso FOGLIO e PARTICELLA la SAT sara' ripetuta, io
devo prima raggruppare per ID_ANAG che e' il nominativo della persona
proprietaria delle particelle i vari fogli e particelle raggruppati e
poi di questo raggruppamento devo fare la somma.
Quindi la prima query e' una query di raggruppamento dove prendo il
MAX della SAT, se esistono FOGLI e PARTICELLE uguali e, dopo aver
creato questo elenco devo sommare i vari valori.
Farlo con le query e' un'operazione molto semplice e banale ma,
poiche' io devo aggiornare al fondo della maschera il valore totale
della SAT (in una casella di testo) ho bisogno di crearmi una routine
che, alla variazione del campo SAT mi aggiorni il totale a fondo
pagina.
Per fare questo ho preso spunto dal NG ed ho creato una funzione
retSum() come segue:
Public Function retSum() As Long
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset(" SELECT [rif catastali].ID_ANAG, 
Max(nz([SAT])) AS sup1 " & _
" FROM [rif catastali] GROUP BY [rif catastali].ID_ANAG, " & _
"[rif catastali].Foglio, [rif catastali].Particella " & _
" HAVING ((([rif catastali].ID_ANAG)=" & Forms!anagrafica!ID & "));",
dbReadOnly)
If rs.BOF Then retSum = 0: Exit Function
retSum = rs!sup1
End Function
Questa query mi dovrebbe eseguire la prima parte dell'operazione, il
RAGGRUPPAMENTO per FOGLIO e PARTICELLA, ma invece si blocca al primo
codice di FOGLIO e PARTICELLA.
Una volta creato questo elenco, su questa query ne dovrebbe essere
impostata un'altra che provveda ad effettuare la somma delle SAT
raggruppate.
Mi e' sembrato di vedere che dovrei usare la SHAPE... ma forse non
sono all'altezza!!!
Grazie cmq a chi dovesse essere in grado di dirottarmi sulla retta
via.
A proposito... Ma da VBA io non posso richiamare direttamente le 2
query che ho creato per effettuare le stesse cose?
GRAZIE,
Domenico

 Domenico
Non č mia abbitudine abbandonare un thread, ma visto che dopo questa tua
dettagliata spiegazione ho meno chiaro di prima ciň che ti serve, esco dal
thread, augurandoti di trovare l'aiuto di qualche altro frequentatore del
NG.


 NG.
Roberto, scusa se sono stato troppo prolisso, ma ti ho dato tutte le
indicazioni. Cmq. semplifico il tutto:
ID_ANAG  FG   SAT
1        01   5,02
1        02   4,00
1        02   4,00
2        01   7,00
Devo fare una query che mi raggruppi i dati e mi dia questo risultato
con MAX:
ID_ANAG  FG   SAT
1        01   5,02
1        02   4,00
E poi devo fare una query che mi sommi il totale di SAT:
9,02
Spero di essere stato chiaro. Sono nuovo nel NG e quindi nn so cosa e'
meglio fare.
Grazie,
Domenico

 Domenico
Prova ad utilizzare le funzioni DMax e DSum (vedi help)...
Ciao.
-- 
Sergio MAZZA 

 1        02   4,00
A mio avviso mancano i dati dell'ultimo record (ID_ANAG=2) da questo
risultato: ergo, non ho capito secondo quali criteri vorresti ottenere quel
risultato partendo da quei records...
Alessandro

...

La casella ID_ANAG è già linkata ad un anagrafico. Quindi su quello
non c'e' problema ma, a quanto pare, e' una cosa difficile.
Grazie cmq.,
Do


Non dovrebbe essere difficile: lo diventa se non si capisce esattamente cosa
si vuol fare.
Faccio un tentativo un po' alla cieca.
La seguente query (chiamiamola QryMax) ti restituisce il valore massimo di
SAT di OGNI coppia ID_ANAG + FG:
SELECT ID_ANAG, FG, MAX(SAT) AS MaxSat FROM MiaQuery GROUP BY ID_ANAG, FG;
La seguente query ti restituisce la somma dei valori massimi di OGNI
ID_ANAG:
SELECT SUM(MaxSat) FROM QryMax GROUP BY ID_ANAG;
Il mio consiglio è di fare delle query nel db e verificare il risultato
PRIMA di mettersi a scrivere del codice VB (come ho visto nel tuo post
originale): dovrebbe essere più semplice capire se è la strada giusta o
meno.
HTH.
Alessandro

 catasto_somma;", dbReadOnly)
Se la query catasto_somma č identica a quella da me sopra riportata, devi
fare:
Set rs = CurrentDb.OpenRecordset("SELECT SUM(MaxSat) AS sup FROM
catasto_somma GROUP BY ID_ANAG;", dbReadOnly)
Ti rinnovo il consiglio di lavorare con le query anzichč fare le prove da
VBA.
Alessandro

...

ho creato la prima query (catasto_somma) che mi fa l'elenco dei
MAX(SAT) ma per richiamarla in una seconda query da VBA ho fatto:
Set rs = CurrentDb.OpenRecordset("SELECT sum(MaxSup) AS sup from
catasto_somma;", dbReadOnly)
Ma ho sbagliato sicuramente qualcosa
Grazie

...

Sei grande Alessandro.
Grazie mille
Ho risolto tutto
Buon lavoro e consultate i NG