Filtri su query

di il
10 risposte

Filtri su query

Salve a tutti, prima di esporre il mio problema voglio ricordare che sono un principiante...
Espongo cosa voglio ottenere:
Devo stampare un report da ID a ID in base al risultato di 2 query.
per raggiungere questo risultato attualmente faccio così:
Filtro la prima query in base ai criteri che mi interessano, la quale mi restituisce vari record (il record che serve a me è sempre quello con ID maggiore).
Filtro la seconda query in base hai criteri che mi interessano, la quale mi restituisce vari record (il record che serve a me è sempre quello con ID minore).

Per ottenere l'ID minore e maggiore apro le rispettive maschere in modalità nascosta che prendono i dati dalle query e vado rispettivamente all'ultimo record sulla prima maschera e primo record sulla seconda maschera. Con una terza query filtro i record prendendo i valori dalle maschere aperte.
Tutto funziona perfettamente ma vorrei migliorare questo sistema, per fare ciò ho pensato che devo trovare il modo che le query mi restituiscano solo il record che mi interessa quindi la prima con ID maggiore la la seconda con ID minore. Ho provato con > e < nei criteri della query nel campo ID ma mi restituisce errore, stessa cosa con MIN e MAX e già qui sono fermo... poi devo dire al report di stampare "DA" "A" in base al risultato delle due query.

Qualcuno mi può aiutare per capire qual'è la strada giusta da prendere?

Grazie a tutti in anticipo per il vostro aiuto

10 Risposte

  • Re: Filtri su query

    Io non ho capito nulla. Rispiega tutto usando i nomi propri delle query e dei campi che entrano in gioco.
  • Re: Filtri su query

    Sei stato troppo generico, l'unica risposta che ti si uò dare è altrettanto generica:

    BOH!

    Se invece inizi con il mostrare la/le query possiamo ragionarci...
  • Re: Filtri su query

    Il DB ordini di lavoro ha la tabella TBoodini con campi- ID;Stampa; descrizione;ecc ecc
    Nel campo stampa viene inserita una "S" che indica che tutti gli ordini precedenti sono già stati verificati e stampati e questo avviene più volte al giorno quindi io filtrando il campo stampa con "S" individuo i record che mi interessano, a me servono tutti i record che si trovano in mezzo tra ID della prima "S" e l'ultimo ID dell'ultima "S".
    es:
    ID - Stampa - Descrizione
    1 - - aaaaa
    2 - s - bbbbb
    3 - - aaaaa
    4 - - bbbb
    5 - s - aaaaa
    6 - - bbbbbbbbb
    7 - s - aaaaa
    8 - - aaaa
    Io devo stampare tutti i record che vanno dall'ID 2 all'ID 7
  • Re: Filtri su query

    A me sfugge ancora qualcosina riguardo la coerenza di informazioni che hai descritto...ma forse non è importantissima. Rispondendo a

    Roberto2012 ha scritto:


    Io devo stampare tutti i record che vanno dall'ID 2 all'ID 7
    1. Vai in visualizzazione struttura query
    2. In corrispondenza del campo ID, a Criterio prova a scrivere così:
    Not Min([ID]) Or Not Max([ID])
  • Re: Filtri su query

    Buongiorno,
    - I record che devi filtrare sono comprensivi della prima e ultima 's'?
    - sono per caso filtrati anche in base ad una data?
    - ti servono anche i record intermedi che non hanno la 's'?
    - le query si basano su una sola tabella?
  • Re: Filtri su query

    Ma la QUERY ????
    Sai leggere?
  • Re: Filtri su query

    Questo è l'attuale SQL della query che sto usando per fare le mie prove:
    SELECT TBordini.ID, TBordini.Stampa, TBordini.descrizione
    FROM TBordini
    WHERE (((TBordini.Stampa)="S"));
  • Re: Filtri su query

    OsvaldoLaviosa ha scritto:


    A me sfugge ancora qualcosina riguardo la coerenza di informazioni che hai descritto...ma forse non è importantissima. Rispondendo a

    Roberto2012 ha scritto:


    Io devo stampare tutti i record che vanno dall'ID 2 all'ID 7
    1. Vai in visualizzazione struttura query
    2. In corrispondenza del campo ID, a Criterio prova a scrivere così:
    Not Min([ID]) Or Not Max([ID])

    Grazie Osvaldo per la tempestiva risposta, quando uso nei criteri della query corrispondente in campo ID il criterio Not Min([ID]) Or Not Max([ID])
    mi restituisce il messaggio "Impossibile avere una funzione di aggregazione nella clausa WHERE ecc ecc"
  • Re: Filtri su query

    ...e se levi il criterio nel campo stampa e metti
    [TBordini]![ID]>=DMin("[ID]";"TBordini";"[Stampa]='s'") And [TBordini]![ID]<=DMax("[ID]";"TBordini";"[Stampa]='s'")
    nel criterio del campo id?
  • Re: Filtri su query

    Usando la logica verrebbe di dire:
    seleziona il range di record inclusi tra il primo e l'ultimo in cui il campo Stampa = 's'
    In teoria si dovrebbe usare un BETWEEN sul campo ID:

    WHERE ID BETWEEN Min(ID) AND Max(ID)

    ma, come abbiamo già visto il risultato è quello di ottenere un errore (giustamente)
    Bisognerebbe avere proprio i valori esatti ID (il primo e l'ultimo) che nel caso specifico sono il 2 ed il 7.

    Occorre perciò utilizzare un escamotage, utilizzando due sub-query che restituiscano questi valori:
    
    SELECT ID, Stampa, Descrizione 
    FROM OrdiniLavoro 
    WHERE ID BETWEEN 
    (SELECT Min(ID) FROM OrdiniLavoro WHERE Stampa = 's')
    AND (SELECT Max(ID) FROM OrdiniLavoro WHERE Stampa = 's')
    
    che mi sembra restituisca il risultato atteso:
    
    ID Stampa	Descrizione	
    2  s        bbbb	
    3           aaaa	
    4           bbbb	
    5  s        aaaa	
    6           bbbb	
    7 s         aaaa
    
Devi accedere o registrarti per scrivere nel forum
10 risposte