Newsgroup: it.comp.appl.access
Titolo: query di raggruppamento timbrature

Ciao a tutti.
Anch'io come tanti prima di me mi trovo a dover organizzare le timbrature
dell'azienda
Importo i dati dal lettore badge in una tabella Movimenti:
IdTerminale (numerico)
IdBadge       (numerico)
Giorno        Data/Ora
Ora            Data/ora
IdCausale     (numerico)
(per ora causale è solo 0 ingresso ed 1 uscita)
Volevo visualizzare tutti i movimenti di una giornata di una persona in
un'unico record e cercando come scrivere la query mi sono imbattuto in
questo post dove Roberto suggeriva la query:
http://groups.google.it/groups?hl=it&lr=&selm=bSF7c.83027%24Kc3.2706316%40twister2.libero.it&rnum=3
che ho provato adattandola al mio caso senza successo.
Mi da un errore di dati non corrispondenti nell'espressione criterio.
La query che utilizzo io è
SELECT Movimenti.IdBadge, Movimenti.Giorno,
CDate(DMin("OraTimbratura","Movimenti","IdBadge ='" & [IdBadge] & "' AND
Giorno
= #" & Format([Giorno],"mm/dd/yyyy") & "# AND IdCausale = 0")) AS Ingresso,
CDate(DMin("OraTimbratura","Movimenti","IdBadge ='" & [IdBadge] & "' AND
Giorno
= #" & Format([Giorno],"mm/dd/yyyy") & "# AND IdCausale = 1")) AS Uscita,
IIf(Not IsNull(DMax("OraTimbratura","Movimenti","IdBadge ='" & [IdBadge] &
"'
AND Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "# AND IdCausale = '00'" &
" AND
OraTimbratura <> #" & CDate(DMin("OraTimbratura","Movimenti","IdBadge ='" &
[IdBadge] & "' AND Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "# AND
IdCausale
= 0")) & "#")),CDate(DMax("OraTimbratura","Movimenti","IdBadge ='" &
[IdBadge] & "' AND Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "# AND
IdCausale
= 0" & " AND OraTimbratura <> #" &
CDate(DMin("OraTimbratura","Movimenti","IdBadge
='" & [IdBadge] & "' AND Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "#
AND
IdCausale = '00'")) & "#")),Null) AS Ingresso1, IIf(Not
IsNull(DMax("OraTimbratura","Movimenti","IdBadge ='" & [IdBadge] & "' AND
Giorno
= #" & Format([Giorno],"mm/dd/yyyy") & "# AND IdCausale = '01'" & " AND
OraTimbratura
<> #" & CDate(DMin("OraTimbratura","Movimenti","IdBadge ='" & [IdBadge] & "'
AND Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "# AND IdCausale = 1")) &
"#")),CDate(DMax("OraTimbratura","Movimenti","IdBadge ='" & [IdBadge] & "'
AND
Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "# AND IdCausale = '01'" & "
AND
OraTimbratura <> #" & CDate(DMin("OraTimbratura","Movimenti","IdBadge ='" &
[IdBadge] & "' AND Giorno = #" & Format([Giorno],"mm/dd/yyyy") & "# AND
IdCausale
= 1")) & "#")),Null) AS Uscita1
FROM Movimenti
GROUP BY Movimenti.IdBadge, Movimenti.Giorno
ORDER BY Giorno, IdBadge;
Dove sbaglio, ma soprattutto perché?
Grazie a tutti

 Dove sbaglio, ma soprattutto perché?
Cerca di spiegare con piů precisione cosa vorresti ottenere e magari lo
scopriamo... ;-)
Alessandro

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


Ma ora riflettendo mi chiedo:
quetsa concatenazione la posso fare anch'io direttamente quando vado ad
importare i dati modificando la tabella "Movimenti" in modo che abbia
un'orario di ingresso ed uno di uscita.
Questo mi aiuterebbe nella ricerca degli errori in quanto non dovrei trovare
più un ingresso e poi l'uscita seguente, ma semplicemente guardare quale
campo è vuoto.
Suggerimenti?
Marco

[Cut]
OK ora va grazie.
Volevo però capire come funziona questa query.
Supponiamo che io abbia solo due record Ingresso ed Uscita e che (magari!)
non ci siano errori o altro e volessi fonderli in un unico record.
Come dovrei fare?
Mi servirebbe capire come tradurre la seguente istruzione esposta in SQL
maccheronico...:
SELECT
Giorno, Ora Ingresso (WHERE IdCausale =0), OraUscita (WHERE IdCausale =1)
WHERE Giorno di Ora ingresso = Giorno di Ora Uscita
AND IdBadge     =  X
Grazie a tutti
Ciao
Marco

 anziché di entrata e viceversa ecc..)
Puoi provare questo:
SELECT 
T1.ID
, T1.ORA AS Ingresso,
(SELECT TOP 1 T2.ORA FROM Tabella5 T2 WHERE T2.GIORNO=T1.GIORNO AND
T2.ID
=
T1.ID
 AND T2.CAUSALE="uscita" AND T2.ORA>T1.ORA ORDER BY T2.ORA) AS
Uscita
FROM Tabella5 T1 WHERE T1.GIORNO=#1/27/2005# AND T1.CAUSALE="ingresso"
ORDER BY T1.ORA;
Però dubito fortemente (non ho fatto molte prove) che "corregga" (cioè
gestisca correttamente) tutti i possibili casi anomali (entrate senza
uscita, due entrate di seguito, ecc.).
HTH.
Alessandro

 Come dovrei fare?
Non daevi fare altro che eseguire quella query che funziona anche nel caso
in cui esitono per un giorno/IdBadge solo due record: prova e vedrai quale
sarà il risultato.
[CUT]
