RIcavare valore massimo da una query di raggruppamento

di il
12 risposte

RIcavare valore massimo da una query di raggruppamento

Ciao a tutti
Come da titolo, vorrei ricavare quel valore.
La mia query seleziona dei dati da una tabella in cui uno dei campi è numerico; in questi campi registro alcuni numeri (che si ripetono spesso).
Alla fine sul report ho creato un campo testo in cui visualizzo il testo "X di Y" (ovvero = [Plico] & " di " & [Plico]).
In pratica vorrei ottenere un elenco "1 di 3", "2 di 3", "3 di 3", oppure "1 di 8", "2 di 8", etc etc
Questo elenco viene visualizzato in un subreport, a 1 sola riga, con origine dati

SELECT tblIspezione.[Plico], tblIspezione.[Foto1], tblIspezione.[Idoneita], tblIspezione.[Note2] FROM tblIspezione WHERE (((tblIspezione.ID_pratica)=[Forms]![frmPrincipale]![ID_pratica])) GROUP BY tblIspezione.[Plico], tblIspezione.[Foto1], tblIspezione.[Idoneita], tblIspezione.[Note2] HAVING (((tblIspezione.[Idoneita])=True)) ORDER BY tblIspezione.[Plico]; 
In pratica non so come impostare la parte di testo "fissa" (cioè quel 3 o quell'8)

Grazie

Andrea

12 Risposte

  • Re: RIcavare valore massimo da una query di raggruppamento

    Jocman ha scritto:


    In pratica non so come impostare la parte di testo "fissa" (cioè quel 3 o quell'8)
    Posso dire che non ho capito nulla della query e del contenuto del report?
    A me sembra che tua abbia spiegato una cosa totalmente inutile per quello che devi ottenere.
    Devi scriverlo sul report? descrivi il report.
    Una query di raggruppamento fatta in quel modo la considero riscrivibile in modo più semplice.
    Perché scomodare l'having quando tutto può essere fatto con una Where? non usi da nessuna parte le funzioni di aggregazione tipo Sum() Count(), ti limiti al group by che può essere ottenuto con un DISTINCT. L'unica WHERE, quella che fa riferimento al contenuto di una maschera, toglila da lì e passala come WHERE condition da DoCmd.OpenReport.
    Poi gioca sul report, facendo i "conteggi" con caselle di testo apposite, nascoste, da mettere nel pié di qualcosa (sezione, gruppo, pagina, report... ce ne sono fino allo sfinimento) e fai fare i conti al report, sistema che rispecchia sempre quello che viene visualizzzato.
    Ripartiamo, Jocman? Da report, direi.
  • Re: RIcavare valore massimo da una query di raggruppamento

    Puoi fare un esempio con qualche riga di dati di input e cosa vorresti ottenere?
    ... anche su che banca dati ti appoggi perchè se ho capito quello che chiedi e se non usi Access come db esistono funzioni apposite per fare "la graduatoria" (es in mssql c'è RANK) per una chiave, altrimenti si può aggirare con un SQL con sub-SQL
  • Re: RIcavare valore massimo da una query di raggruppamento

    L'ambiente è access.
    La tabella (è una tabella secondaria collegata ad una tabella anagrafica - relazionata uno-a-molti) registra semplicemente dei plichi in arrivo da Tizio, per ogni plico ne registra il contenuto, con una clausola SI/NO se utile o meno.
    Es:
    Tizio manda 2 pacchi. Pacco 1: contiene A, B, C. Pacco 2: contiene D, E.
    Nella tabella figlia registrero 5 record, e per ogni record: ID di riferimento anagrafico, nr. di plico (1, 2, etc) e oggetto
    Nel caso sopra la tabella risulterà avere:

    ID PLICO CONTENUTO
    250 1 A
    250 1 B
    250 1 C
    250 2 D
    250 2 E

    Il report di cui parlo è una scheda anagrafica; a me interessa il sottoreport in essa contenuto, basato su quella query che ho indicato e che mi riporterà solo un...riassunto dei plichi, cioè (nell'esempio di prima):

    Plico 1 di 2: Verificato da ___________________________ Firma ______________
    Plico 2 di 2: Verificato da ___________________________ Firma ______________

    La clausola HAVING la avevo messa perchè se non c'è idoneità di uno dei contenuti del plico non deve essere menzionato (mi ritrovo altrimenti elementi doppi, tipo "Plico 2 di 2" ripetuto 2 volte (o più, a seconda di quanti elementi di quel plico non sono idonei); ad esempio se E non fosse idoneo, otterrrei:

    Plico 1 di 2: Verificato da ___________________________ Firma ______________
    Plico 2 di 2: Verificato da ___________________________ Firma ______________
    Plico 2 di 2: Verificato da ___________________________ Firma ______________

    Sicuramente avrò sbagliato ad impostare la query

    La parte di testo "fissa" cui mi riferivo è la parte " ...di 2"

    Spero di aver fatto un pò di luce....

    Andrea
  • Re: RIcavare valore massimo da una query di raggruppamento

    Ti dico cosa ho capito ... sei in un report in cui avrai filtrato/aggregato per ID (riferimento anagrafico) e avrai l'elenco delle cose inviate e vuoi un "riassunto" dei plichi subito sotto, giusto?
    se così, avrai creato un sottoreport in cui raggruppi per plico, no? 1 e 2 li hai già ... il totale hai detto di riuscire già di tuo...
    allora nn capisco cosa ti manca...
  • Re: RIcavare valore massimo da una query di raggruppamento

    Prendiamo questo esempio.
    
    ID       PLICO       CONTENUTO
    250        1             A
    250        1             B
    250        2             C
    250        3             D
    250        3             E
    
    Ipotizzando che C non sia idoneo, come deve comparire il risultato sul report?
    1 di 3
    3 di 3
    Edito ed aggiungo
    
    ID       PLICO       CONTENUTO
    250        1             A
    250        1             B
    250        2             C
    250        2             D
    250        3             E
    
    In questo caso è E a non essere idoneo.
    1 di 3
    2 di 3, comunque anche se il 3 di 3 non c'è?
    E' una domanda forse superflua ma prima di perderci del tempo al lavor... di notte anziché dormire è meglio avere il quadro completo e certo.
  • Re: RIcavare valore massimo da una query di raggruppamento

    Scusate la...latitanza, ma sono stato fuori per lavoro....
    Allora per rispondere circa "l'Idoneità".
    Non ha importanza l'idoneità o meno; o quantomeno non nel sottoreport.
    Nel sottoreport devono comparire tutti, quindi 1 di 3, 2 di 3, 3 di 3. (in quel sottoreprto viene solo aggiunto a penna chi ha verificato l'integrità delplico e la sua firma)
    L'idoneità (o non idoneità) viene riportata nel report principale, e su quello non ho problemi: le informazioni da visualizzare nel report principale sono tutte corrette.
    E' quel sottoreport che mi da il problema. Tra l'altro mi sono accorto di aver scritto in maniera equivoca:

    "La clausola HAVING la avevo messa perchè se non c'è idoneità di uno dei contenuti del plico non deve essere menzionato "

    Mi sono espresso male: il fatto è che se quel contenuto è flaggato come "non idoneo" la query per il sottoreport mi restituisce una voce doppia (quindi nell'esempio il "2 di 2" ripetuto)
  • Re: RIcavare valore massimo da una query di raggruppamento

    Credo (credo.....) di aver risolto.
    Ho aggiunto alla query un'espressione relativa ad una funzione Dmax sul campo Plico
    In questo modo ottengo per ogni record della query il valore massimo del campo Plico (valore che sarà sempre lo stesso) e visualizzo quel valore nel campo testo del subreport del tipo
    
    =[Plico] & " di " & [Espr1]
    
    Al momento il risultato è quello voluto.
    Vediamo nei prossimi giorni con le prossime pratiche da lavorare se tutto funziona come spero
  • Re: RIcavare valore massimo da una query di raggruppamento

    Per correttezza (verso Phil):
    ho provato a fare la modifica della query e del report come da lui suggerito nella sua prima risposta, ma se da una parte credo di aver modificato nel modo giusto la query (cioè in pratica mi seleziona tutti i record dalla tblIspezione), quando poi vado a fare una selezione sull'apertura del report come suggerito:
    
    DoCmd.OpenReport "srptIspezione_copia", acViewPreview, , "[ID_pratica] = 2046"
    
    non ottengo alcuna selezione dei record che mi servono, ma tutto l'elenco dei record collezionati dalla query

    Sbaglierò di sicuro qualcosa (è una metodica che non ho mai usato)
  • Re: RIcavare valore massimo da una query di raggruppamento

    Jocman ha scritto:


    Credo (credo.....) di aver risolto.
    no......
  • Re: RIcavare valore massimo da una query di raggruppamento

    Visto che nel titolo parli di query è preferibile impiegare, direttamente, la funzione MAX e non la DMAX (in modo da velocizzare le operazioni).
  • Re: RIcavare valore massimo da una query di raggruppamento

    Jocman ha scritto:


    Jocman ha scritto:


    Credo (credo.....) di aver risolto.
    no
    Lo ripeschiamo o ormai è finita? Avevo "trascurato" il thread perché sapevo che era impegnativo, ora se ne può parlare, se serve.
  • Re: RIcavare valore massimo da una query di raggruppamento

    Secondo me c'è un errore di progettazione e sviluppo di base delle tabelle e delle loro relazioni.

    Se non ho capito male, i plichi sono inglobati in un record con altri dati, mentre dovrebbero essere in una tabella a parte collegata con chiave esterna al mittente.
    Questo lo costringe a fare giri assurdi per recuperare i dati, manipolarli e validarli, mentre se fossero elementi a se stanti, nella tabella dei plichi potrebbe mettere tutto quello che gli occorre per validarli e qualsiasi query di raggruppamento e conteggio sarebbe molto più semplice.
Devi accedere o registrarti per scrivere nel forum
12 risposte