Newsgroup: it.comp.appl.access
Titolo: conteggio di record con filtro su più campi

Salve a tutti,
avrei questo problema da risolvere ma non ci riesco. Questa č la mia
situazione: Ho una tabella con 8 campi nei quali inserisco dei codici.
I codici sono sempre gli stessi per gli 8 campi. In pratica il codice
90533 puň stare nel campo1 cosě come negli altri 7. Ora dovrei contare
tutti i record che in uno degli 8 campi contengono proprio quel
codice. Ho fatto una query inserendo nei criteri degli otto campi lo
stesso riferimento alla casella di testo nella quale inserisco il
codice ma ovviamente ricevo solo ed esculusivamente i record in cui
gli otto campi sono tutti uguali!
La prima soluzione che mi viene in mente č quella di fare 8 query di
accodamento diverse, ognuna delle quali controlla un campo e far
accodare ad una tabella sulla quale poi effettuo il conteggio! Ma non
credo questa sia una stuazione molto performante. Esiste qualche
funzione o qualche trucco che posso utilizzare? Tanto meglio se riesco
a fare tutto con una query...
Ciao e grazie!
Luigi

 Luigi
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Luigi ha scritto:

io lo farei da codice, ma credo che, pensandoci un attimo, si possa fare 
anche con una query.
Dim lRS as RecordSet
Dim lCONT As Long
Dim lCODICE as Long
lCODICE = Me.Testo1 'CODICE DA RICERCARE
lCONT = 0
Set lRS = currentdb.openrecordset("MIA_TABELLA")
Do While Not lRS.EOF
	If lRS!CAMPO1 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO2 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO3 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO4 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO5 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO6 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO7 = lCODICE Then
		lCONT = lCONT + 1
	ElseIf lRS!CAMPO8 = lCODICE Then
		lCONT = lCONT + 1
	EndIf
	lRS.MoveNext
Loop

 Luigi
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------


Già quando ho scritto ho pensato che qualcuno mi avrebbe detto una cosa del 
genere ma purtroppo non è così. In pratica si tratta di un gestionale per un 
laboratorio di analisi cliniche. Devo inserire le ricette ed ogni ricetta 
può contenere solo 8 analisi! L'ordine deve essere rispettato e altri 
vincoli vari... 

 Roberto
Grazie Roberto,
ho seguito le tue indicazioni e funziona. Ora avrei un altro problema da 
sottoporre alla vostra attenzione. La query, abbiamo detto, ha gli otto 
campi in cui sono presenti i codici. Mettendo in or tutte le condizioni 
riesco ad estrapolare tutti i record che contengono quel codice 
indistintamente dalla loro posizione. Ora però ci sono altri 8 campi che mi 
indicano la quantità per ognuno degli otto. E' possibile sommare le sole 
quantità dei campi che si riferiscono al codice da me cercato? Esempio:
Codice1| QuCod1 | Codice2 | QuCod2|...|Codice8 | QuCod8
90233           1        90564         1               90478        3
94569           2        90233         2               96874        1
allora se la query è stata fatta sul codice 90233 dovrei ricevere 3. Sto 
chiedendo la luna?
Ciao e grazie!
Luigi 

 vincoli vari...
La tipica configurazione 1---Molti, non importa se
il MAX=8 e se l'ordine deve essere rispettato.
Di certo se hai la possibilità di inserirne 1 oppure 8
quanto hai fatto è discutibile dal punto della Normalizzazione
che non si applica da N livelli in poi ma da subito come
struttura.
In ogni caso non voglio insistere non conoscendo bene la questione.
La soluzione di Roberto può essere decisamente risolutiva.
@Alex 


 ha scritto nel messaggio
news:rKg7e.63744$zZ1.1...@twister1.libero.it...

Se la tabella che contiene i dati si chiama Tabella1 ed ha una struttura
simile a questa:
ID             Contatore e chiave primaria
Codice1    Numerico
QuCod1    Numerico
Codice2    Numerico
QuCod2    Numerico
...
...
Codice8    Numerico
QuCod8    Numerico
Se vuoi tramite query ottenere il totale della quantità del codice scelto a
prescindere in quale delle 8 coppie di campi i dati di tale codice si
trovino.
Creati una query unione (vedi help) chiamata Query1 che abbia il seguente
codice SQL:
SELECT Tabella1.ID, Tabella1.Codice1 AS Codice, Tabella1.QuCod1 AS Quantità
FROM Tabella1
WHERE (((Tabella1.Codice1)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice2 AS Codice, Tabella1.QuCod2 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice2)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice3 AS Codice, Tabella1.QuCod3 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice3)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice4 AS Codice, Tabella1.QuCod4 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice4)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice5 AS Codice, Tabella1.QuCod5 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice5)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice6 AS Codice, Tabella1.QuCod6 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice6)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice7 AS Codice, Tabella1.QuCod7 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice7)=[Digita codice:]))
UNION SELECT Tabella1.ID, Tabella1.Codice8 AS Codice, Tabella1.QuCod8 AS
Quantità
FROM Tabella1
WHERE (((Tabella1.Codice8)=[Digita codice:]));
Infine creati una query di raggruppamento basata sulla query unione di cui
sopra e che abbia il seguente codice SQL:
SELECT Query1.Codice, Sum(Query1.Quantità) AS Totale
FROM Query1
GROUP BY Query1.Codice;
Aprendo quest'ultima query di ragruppamento dovresti ottenere ciò che
volevi.
Se preferisci puoi ottenere lo steso risultato da codice VBA.



Ciao Roberto ancora una volta devo rendere omaggio alla tua sconfinata bontà 
e professionalità!
Funziona alla grande!
Ciao e grazie.
Luigi 


Con questo tipo di query sono riuscito a fare quello che volevo in un batter 
d'occhio. Ora però vorrei fare ancora qualcosa di più. Fare il medesimo 
conteggio questa volta però non scegliendo di volta in volta il codice ma 
facendolo su tutti i codici. La query mi servirebbe per creare un report. Ho 
provato con qualche modifica al codice ma senza nessun risultato positivo. 
Potreste darmi qualche suggerimento?
Ciao e grazie,
Luigi 


Pensandoci un pò sono giunto ad una soluzione. Nel corpo del report ho messo 
il codice in modo tale che scorre sempre. Nella query di unione ho messo 
come criterio del where proprio il campo del codice del report. Poi ho 
creato un sottoreport il cui unico campo è quello della query che somma le 
quantità della query di unione. Forse non è il modo migliore ma è pur sempre 
un metodo funzionante!
Ciao e grazie,
Luigi 

 Luigi
