Query con riepilogo

di il
15 risposte

Query con riepilogo

Ciao a tutti, è il mio primo messaggio e sono un (molto) principiante di Access.
Il mio problema è questo: vorrei creare una query di riepilogo, ma quando metto la data fra i criteri del campo data, anziché estrarre un'unica riga, mi escono tutte le righe che rientrano nell'interrogazione.
La query in questione è un riepilogo delle mie uscite in bicicletta suddivise per:

Allenamento da solo
Uscite di gruppo
Cicloturistiche
Eventi speciali
Mediofondo
(e altre)

La query funziona benissimo se non prendo in considerazione la data, ma se metto il filtro per periodo (es: 01/01/2016 - 31/12/2016) mi escono fuori tutte le righe.

15 Risposte

  • Re: Query con riepilogo

    Non conosco access ma per aiutarti sarebbe utile se tu postassi l'intera tua query....
  • Re: Query con riepilogo

    Come inserisci il criterio relativo alla data...?
    La Domanda è fondamentale proprio perché il formato anglosassone, quello riconosciuto da JET, a seconda di come inserisci il parametro va forzato oltre che formattato con #....#
  • Re: Query con riepilogo

    @Alex ha scritto:


    Come inserisci il criterio relativo alla data...?
    La Domanda è fondamentale proprio perché il formato anglosassone, quello riconosciuto da JET, a seconda di come inserisci il parametro va forzato oltre che formattato con #....#
    Nel formato italiano. >=01/01/2016 and <=31/12/2016
  • Re: Query con riepilogo

    Fabriziog ha scritto:


    @Alex ha scritto:


    Come inserisci il criterio relativo alla data...?
    La Domanda è fondamentale proprio perché il formato anglosassone, quello riconosciuto da JET, a seconda di come inserisci il parametro va forzato oltre che formattato con #....#
    Nel formato italiano. >=01/01/2016 and <=31/12/2016
    Non è sufficiente come risposta.... il formato ti ho già spiegato che deve essere anglosassone quindi mm/dd/yyyy oppure standard ISO... ma se lo fai in un certo modo è il sistema che applica la conversione... se lo fai in altri modi lo devi fare tu.
    Tu come li passi i valori..?

    Altra cosa... non è che ti interessa filtrare l'anno 2016...?
    In questo caso perché complicarsi la vita con le date quando basta estrarre l'anno che diventa NUMERICO è più semplice...?
  • Re: Query con riepilogo

    @Alex ha scritto:


    Non è sufficiente come risposta.... il formato ti ho già spiegato che deve essere anglosassone quindi mm/dd/yyyy oppure standard ISO... ma se lo fai in un certo modo è il sistema che applica la conversione... se lo fai in altri modi lo devi fare tu.
    Tu come li passi i valori..?

    Ho provato anche come hai detto tu con il simbolo # (anche se Access lo aggiunge in automatico) e mettendo le date in mm/dd/yyyy, ma le righe appaiono lo stesso. (Ho scritto nel campo data: >=#11/01/2015# and <=#10/31/2016# - filtro dal 1° novembre 2015 al 31 ottobre 2016)

    @Alex ha scritto:


    Altra cosa... non è che ti interessa filtrare l'anno 2016...?
    In realtà mi serve il periodo 1° novembre - 31 ottobre, perché considero la stagione ciclistica come quella dei professionisti, anche se molti amatori usano l'anno solare.

    In sostanza, se il campo data non lo metto la query viene eseguita correttamente, ma mi vengono raggruppati i valori di 10 anni. Se metto il campo data il raggruppamento va a farsi benedire.

    L'obiettivo di questa query è di prendere i dati per singola categoria e metterli in una maschera che funga da cruscotto, evidenziando in base alle categorie di chilometri percorsi quanto fatto durante la stagione e confrontarlo con l'anno precedente.
  • Re: Query con riepilogo

    Io ti ho detto che ci vanno i segni # ma ti ho anche detto che dipende da come passi i criteri...e tu alla 2° volta che te lo si chiede continui a non rispondere al quesito specifico.

    Cosa vuoi che ti dica adesso..?
    Facciamo così, se vuoi rispondere magari leggo cosa scrivi.
  • Re: Query con riepilogo

    Hai provato anche
    BETWEEN #11/01/2015# AND #10/31/2016#
  • Re: Query con riepilogo

    Scusate, ma non ho ricevuto le mail ai vostri messaggio, finché non mi sono collegato non le ho lette. Strano, perché l'opzione e-mail era selezionata.
  • Re: Query con riepilogo

    OsvaldoLaviosa ha scritto:


    Hai provato anche
    BETWEEN #11/01/2015# AND #10/31/2016#
    Sì, ho provato, ma il risultato è lo stesso: compaiono sempre i record di ogni singola uscita.
  • Re: Query con riepilogo

    @Alex ha scritto:


    Io ti ho detto che ci vanno i segni # ma ti ho anche detto che dipende da come passi i criteri...e tu alla 2° volta che te lo si chiede continui a non rispondere al quesito specifico.
    Ti ho risposto. Ho scritto che ho messo il filtro come mi hai suggerito tu (>=#11/01/2015# and <=#10/31/2016#), senza esito.
    Forse se mi fai un esempio riesco a capire cosa intendi.
  • Re: Query con riepilogo

    In ogni caso la query orignaria è questa:
    SELECT Percorsi.[Tipo Registrazione], Sum(Percorsi.[Km Effettuati]) AS [SommaDiKm Effettuati], Count(Percorsi.[Tipo Registrazione]) AS [ConteggioDiTipo Registrazione]
    FROM Percorsi
    GROUP BY Percorsi.[Tipo Registrazione]
    HAVING (((Sum(Percorsi.[Km Effettuati])) Is Not Null));
    
    Quando inserisco il filtro data è così:
    SELECT Percorsi.[Tipo Registrazione], Sum(Percorsi.[Km Effettuati]) AS [SommaDiKm Effettuati], Count(Percorsi.[Tipo Registrazione]) AS [ConteggioDiTipo Registrazione], Percorsi.Data
    FROM Percorsi
    GROUP BY Percorsi.[Tipo Registrazione], Percorsi.Data
    HAVING (((Sum(Percorsi.[Km Effettuati])) Is Not Null) AND ((Percorsi.Data)>=#11/01/2015# And (Percorsi.Data)<=#10/31/2016#));
    
    Oppure:
    SELECT Percorsi.[Tipo Registrazione], Sum(Percorsi.[Km Effettuati]) AS [SommaDiKm Effettuati], Count(Percorsi.[Tipo Registrazione]) AS [ConteggioDiTipo Registrazione], Percorsi.Data
    FROM Percorsi
    GROUP BY Percorsi.[Tipo Registrazione], Percorsi.Data
    HAVING (((Sum(Percorsi.[Km Effettuati])) Is Not Null) AND ((Percorsi.Data) Between #1/11/2015# And (Percorsi.Data)<=#10/31/2016#));
    
  • Re: Query con riepilogo

    Siccome stimo che le Date Cardine del Criterio non possono essere FISSE come le hai messe tu(che immagino sia solo un Test), per chi normalmente scrive applicazioni sviluppa consentendo di Parametrizzare questi criteri, quindi scrive Query che pescano i Valori all'esterno, rendendoli gestibili anche a selezioni.
    Siccome questo è il modo NORMALE, pensavo avessi fatto come di Norma si fa, mentre ora comprendo che sei in fase sperimentale, e che spero poi tu vada a modificare, ecco quando lo farai, a seconda di che strumento userai per passare i Parametri, dovrai usare un opportuno metodo di Correzione della sintassi.

    Ora tornando alle Date, c'è da capire come hai inserito la Data nel Database, perchè purtroppo i meno esperti usano Now() che è comodo ma spesso induce ad errori...!

    Ti faccio un esempio...!
    Se inserisci la data con NOW(), aggiungi al valore inserito anche la connotazione [hh:mm:ss] di conseguenza otterrai un valore con i decimali.
    ?cdbl(Now())
     42639,4665393519 
    ?cdbl(Date())
     42639 
    ?clng(Now())
     42639 
    ?clng(Date())
     42639 
    Come vedi avendo i Decimali il valore è Superiore allo stesso Valore restituito prendendo la parte [gg/mm/aaaa]...!

    Quindi in particolare sul limite esterno che usi:
    
    (Percorsi.Data)<=#10/31/2016#)
    il rischio è di aver delle Date che non vengono prese dal criterio...!

    Quindi, verifica bene come stai lavorando, ed eventualmente dovrai modificare il predicato così
    
    Fix((Percorsi.Data))<=#10/31/2016# ....
    Puoi leggere questo Articolo:
    **
  • Re: Query con riepilogo

    No, non uso il parametro Now(), perché mi capita di inserire le registrazioni delle uscite anche diversi giorni dopo che le ho fatte.
    Il campo DATA è puro e semplice: gg/mm/aaaa.
  • Re: Query con riepilogo

    Detta così, se il campo è di tipo data, ed hai seguito i suggerimenti, la sintassi giusta è la penultima, non quella con il Between che andrebbe modificata così:
    
    (Percorsi.Data Between #11/1/2015# And #10/31/2016#)
    Sempre intendendo che hai usato [mm/gg/aaaa].

    Per il resto sicome deve andare, è evidente ti sfugga qualche altra cosa... di cui si fatica a comprendere non avendolo sotto mano.
    Se vorrai mettere a disposizione tramite un Sito di FileSharing magari è più facile...
Devi accedere o registrarti per scrivere nel forum
15 risposte