Newsgroup: it.comp.appl.access
Titolo: Query - Numerazione Records

Buongiorno a tutti.
Su sito comune ho trovato come numerare i records di una maschera 
continua (Grazie Roberto Berrelli !).
E possibile fare le stesse cose direttamente in una query ?
Grazie++
MArco
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 MArco
Sempre nel Sito Comune, nella Sezione Queries leggi la FAQ di Stefano
Bettini intitolata "Come posso inserire nella mia query un campo
progressivo?
Nel prossimo aggiornamento del Sito Comune troverai una nuova FAQ che ti
darà altre tre soluzioni per il tuo problema: ti anticipo il testo di questa
nuova FAQ:
=========================
Come si può ottenere il totale progressivo di un campo in una query e come
si può numerare progressivamente le righe di una query?
Nella Sezione Queries di questo sito è già pubblicata una FAQ intitolata
"Come si può ottenere il totale progressivo di un campo in una query?" che
affronta e risolve il problema di creare il totale progressivo di un campo
utilizzando una funzione scritta in codice VBA che viene richiamata da un
campo calcolato della query, funzione che si preoccupa appunto di calcolare
il totale progressivo di un campo della query.
Altresì sempre nella Sezione Queries c'è una FAQ intitolata "Come posso
inserire nella mia query un campo progressivo?" per inserire in un campo
calcolato la numerazione progressiva delle righe contenute nella query.
Nel database di esempio allegato a questa FAQ si risolvono i due problemi di
cui sopra senza fare uso del codice VBA, ma usando esclusivamente il
linguaggio SQL. Questo database contiene tre queries che danno tre soluzioni
diverse alla creazione di una numerazione progressiva delle righe della
query d alla creazione del totale progressivo di un campo della query.
Tutte e tre le queries di esempio fanno riferimento ad una tabella chiamata
tblMovimenti e che ha la seguente struttura:
IdMovimento          Contatore e chiave primaria
IdProdotto              Numerico
DataMovimento       Data/ora
Quantità                   Numerico
La tabella su cui sono basate le 3 queries deve avere una chiave primaria,
ma, come è mostrato negli esempi, la query non deve essere necessariamente
ordinata per la chiave primaria della tabella, ma può esere ordinata per
altri campi; le tre qeries di esempio sono ordinate per DataMovimento.
La prima query che ordina i record per DataMovimento e contestualmente
ottiene il totale progressivo del campo Quantità e la numerazione
progressiva delle righe, si chiama QueryRaggruppamento ed ha il seguente
codice SQL:
SELECT SUM(1) AS NumProgr, Tab1.IdMovimento, First(Tab1.IDProdotto) AS
IDProdotto, Tab1.DataMovimento,
First(Tab1.Quantità) AS Quantità, SUM(Tab2.Quantità) AS Progressivo
FROM tblMovimenti AS Tab1 INNER JOIN tblMovimenti AS Tab2 ON
Format(Tab1.Datamovimento, "yyyymmdd") &
Format(Tab1.IdMovimento, "000000") >= Format(Tab2.Datamovimento, "yyyymmdd")
& Format(Tab2.IdMovimento, "000000")
GROUP BY Tab1.DataMovimento, Tab1.IdMovimento
ORDER BY Tab1.DataMovimento, Tab1.IdMovimento
La seconda query si chiama invece QuerySubQuery ed ha il seguente codice
SQL:
SELECT (Select Count (*)  FROM tblMovimenti as AAA WHERE
Val(Format(AAA.DataMovimento, "yyyymmdd") & Format(AAA.IDMovimento,
"000000") ) <
 Val(Format(tblMovimenti.DataMovimento, "yyyymmdd") &
Format(tblMovimenti.IDMovimento, "000000") )+1) AS NumProgr,
tblMovimenti.IDMovimento,
tblMovimenti.IDProdotto, tblMovimenti.DataMovimento, tblMovimenti.Quantità,
(Select Sum (AAA.Quantità)  FROM tblMovimenti as AAA
WHERE Val(Format(AAA.DataMovimento, "yyyymmdd") & Format(AAA.IDMovimento,
"000000") ) <
Val(Format(tblMovimenti.DataMovimento, "yyyymmdd") &
Format(tblMovimenti.IDMovimento, "000000") )+1) AS Progressivo
FROM tblMovimenti
ORDER BY tblMovimenti.DataMovimento, tblMovimenti.IDMovimento;
Infine la terza query si chiama QueryDCountDSum ed ha il seguente codice
SQL:
SELECT Val(DCount("*","tblMovimenti","(Format([DataMovimento], 'yyyymmdd') &
Format([IDMovimento], '000000')) <='" & Format([DataMovimento],'yyyymmdd') &
Format([IDMovimento],'000000') & "'")) AS NumProgr,
tblMovimenti.IDMovimento, tblMovimenti.IDProdotto,
tblMovimenti.DataMovimento, tblMovimenti.Quantità,
CDbl(DSum("Quantità","tblMovimenti","(Format([DataMovimento], 'yyyymmdd') &
Format([IDMovimento], '000000')) <='" & Format([DataMovimento],'yyyymmdd') &
Format([IDMovimento],'000000') & "'")) AS Progressivo
FROM tblMovimenti
ORDER BY tblMovimenti.DataMovimento, tblMovimenti.IDMovimento;
Quest'ultima fa uso delle funzioni di aggregazione sui dominii e pertanto è
sicuramente la meno performante.
==================================
Ora decidi tu quale soluzione sia per te migliore.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 nuova FAQ:
Ottimo e abbondante
