Newsgroup: it.comp.appl.access
Titolo: problema query con casella di controllo Si/No

Ciao a tutti.
Ho un problema a costruire una query e spero che voi mi possiate aiutare.
Mi spiego:
Ho tre tabelle relazionate fra di loro che servono per tenere traccia 
degli ordini clienti
tabella CLIENTI ( anagrafica dei clienti )
tabella PCMP ( ordini clienti )
tabella DESCRIZIONE PCMP ( dettagli degli ordini clienti o LOTTI 
appartenenti allo stesso ordine )
nella tabella DESCRIZIONE PCMP c'e' una casella di controllo Sì/No che 
serve per indicare la PUNTUALITA' di consegna del LOTTO dell'ordine 
rispettivo.
Ora, dovrei costruire una query che mi restituisce una lista così formata:
- CLIENTE
- NUMERO DI LOTTI CONSEGNATI
- NUMERO DI PEZZI TOTALI CONSEGNATI
- NUMERO DI LOTTI PUNTUALI
per i primi due punti, non ci sono problemi, sono campi numerici, e non 
faccio altro che fare un COUNT.
e fin qui ci sono. e funziona tutto bene ( allego in fondo al messaggio 
la query )
il problema nasce al terzo punto:
non riesco a far contare ( COUNT ) esattamente il numero di LOTTI 
PUNTUALI, cioè dove la casella Sì/No è spuntata.
Come criterio ho provato ad utilizzare (Vero/Falso) , (Sì/No), (1,0) ma 
nulla da fare.
Esempio:
Cliente : X
lotti consegnati : 100
numero pezzi : 1000
lotti puntuali ( DA TABELLA ) : 50 ( cioè 50 lotti con segno di spunta 
nella casella di controllo Sì/No
Lanciando la query allegata mi restituisce :
- Cliente X
- Lotti consegnati : 100
- Numero pezzi : 1000
- Lotti puntuali : 100   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
######## praticamente non mi conta solo i puntuali, ma conta sia quelli 
spuntati che non. ( almeno penso ).
e lo stesso risultato lo da sia che come criterio metto "Sì" , sia se 
metto "No" !!!!!
sapete darmi una spiegazione voi ?
Vi ringrazio antipatamente e allego la query incriminata.
SELECT Clienti.Cliente, Count([descrizione pcmp].[ID descrizione pcmp]) 
AS [Numero di lotti], Sum([descrizione pcmp].pezzi) AS [Totale pezzi], 
Count([descrizione pcmp].puntualità) AS [Puntualità lotti]
FROM (Clienti INNER JOIN PCMP ON Clienti.IDcliente = PCMP.IDcliente) 
INNER JOIN [descrizione pcmp] ON PCMP.[ID modulo pcmp] = [descrizione 
pcmp].[ID modulo pcmp]
GROUP BY Clienti.Cliente
HAVING (((Count([descrizione pcmp].puntualità))=Yes));
############# query che è generata automaticamente da access.

 HAVING (((Count([descrizione pcmp].puntualità))=Yes));
La tua query non mi pare corretta. Prova questa (che ho buttato gù al volo
senza verificare):
SELECT Clienti.Cliente, Count(D.*) AS [Numero di lotti],
Sum(D.pezzi) AS [Totale pezzi],
(SELECT Count(*) FROM [descrizione pcmp] AS D1 WHERE
 D1.[ID modulo pcmp] = D.[ID modulo pcmp] AND
 D1.puntualità))=1) AS [Puntualità lotti]
FROM Clienti AS C, PCMP AS P, [descrizione pcmp] AS D
WHERE C.IDcliente = P.IDcliente AND
P.[ID modulo pcmp] = D.[ID modulo pcmp]
GROUP BY Clienti.Cliente;
HTH.
Alessandro

Alex NSB ha scritto:

Ho provato la tua soluzione ma non va.
Il puno secondo me è che non so come si fa a conrollare la casella di 
controllo Sì/No in una query.
La query che ho fatto funziona correttamente, solo che conta tutte le 
caselle di controllo Sì/No
indipendentemente che abbiano il segno di spunta o meno!
Provando a semplificare le cose ho realizzato una query di test:
SELECT Count([descrizione pcmp].puntualità) AS ConteggioDipuntualità, 
Count([descrizione pcmp].[ID descrizione pcmp]) AS [ConteggioDiID 
descrizione pcmp]
FROM [descrizione pcmp]
HAVING (((Count([descrizione pcmp].puntualità))=Yes));
che semplicemente mi conta:
- NUMERO TOTALE DI LOTTI
- LOTTI PUNTUALI
(Notare che in questa query non uso relazioni varie magari non corrette 
ecc.... c'e' solo una tabella con due
campi).
il risultato di questa query dovrebbe dare circa: ESEMPIO:
LOTTI TOTALI : 1000
LOTTI PUNTUALI : 530
invece il risultato generato dalla query è:
LOTTI TOTALI : 1000
LOTTI PUNTUALI : 1000
( sia utilizzando come criterio YES sia utilizzando NO !!!!!!! )
è questa la cosa strana.
Tutto ciò m,i porta a pensare che non si faccia così a controllare una 
casella di controllo Sì/No.
non mi pare di vedere nessun altra soluzione.
Tnx.
Spero che qualche buona anima mi possa aiutare.
Ciao.

 HAVING (((Count([descrizione pcmp].puntualità))=Yes));
Questa riga non ha senso: Count ti ritorna un numero di record, quindi un
valore non confrontabile con Yes.
HTH.
Alessandro