Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22

Discussione: Somme in access

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395

    Somme in access

    Buongiorno.
    Spero possiate essermi di aiuto.
    Ho bisogno in access di fare una somma dei 7 maggiori risultati.
    Vi spiego. Ho una tabella con varie colonne (ne elenco solo alcune):
    giocatore - data - pos - totale

    ho bisogno di fare una somma del totale ma solo dei maggiori 7 risultati di un singolo giocatore.
    in excel so che si usa la formula
    =MATR.SOMMA.PRODOTTO(J2:J10*(RANGO(J2:J10;J2:J10;1 )>=K10-7+1))
    questo in excel mi permette di calcolare i 7 maggiori risultati di ogni singolo giocatore, che siano i risultati meno o più di 7 (ho notato però che se trova 2 numeri uguali li "toglie").

    In access ho bisogno di una formula simile per creare un report che poi sia ordinato in ordine discendente nel report.

    Ringrazio fin da ora per le risposte.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Classica query da manuale.
    Nel file che trovi al link qui sotto ti ho scritto un esempio di ciò che vuoi fare.

    http://myfreefilehosting.com/f/72591eac57_0.28MB

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Mi sono appena reso conto di un bug nella query.
    Se ad esempio in un gruppo assegno valori

    20
    10
    10
    10
    10

    la somma risulta 60 anzichè 40. Vedo se riesco a trovare una soluzione.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    attendo la tua risposta. comunque nel mio caso è veramente difficile avere 4 numeri uguali. al massimo ne ho 2 ma anche questo è un caso raro

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    Leggendo qua e la, ho letto anch'io che la select considera gli ex-equo e parlavano di fare una top nella top. Ma non veniva indicato come.

    Come si fa?

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ciao. Mi spiace ma oggi non ho avuto neanche un minuto di tempo da dedicare al tuo problema.
    Con mysql o con mssql saprei darti la soluzione ma con access ancora non ho trovato un sistema. Magari qualcun altro saprà darti la soluzione.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    il sistema l'avrei trovato. Ma sbaglio qualcosa:

    SELECT giocatore, sum(totale) AS somma
    FROM (SELECT TOP 3 giocatori.giocatore, maschile.totale FROM giocatori INNER JOIN maschile ON giocatori.tessera=maschile.tessera WHERE (((maschile.totale) In (Select Top 3 [totale] From maschile Where [tessera]=[giocatori].[tessera] Order By [totale] Desc))) ORDER BY giocatori.giocatore, maschile.totale DESC) AS giocatori
    GROUP BY giocatore
    ORDER BY sum(totale) DESC

    Questa istruzione (subselect) mi permette di non considerare gli ex-equo.
    Unico problema è che adesso mi da solo il primo giocatore e non i successivi.

    Sai dirmi dove sbaglio?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    395
    stavo provando un po' ed ho capito...
    lasciando a top 3 di tutti e due le select estrae i risultati giusti e non tiene conto dei parimerito però mi fa vedere solamente il primo giocatore.
    portando in entrambe le select il top a valore 4 mi fa la somma sempre giusta non tenendo conto dei parimerito sulla somma ma mi fa vedere un solo giocatore invece che 2 come sarebbero in tabella

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Così su due piedi non saprei dirti. Dovrei scomporre la tua query per capire esattamente cosa faccia.

    A livello teorico occorrerebbe creare una situazione del genere, in pratica ordinare la tua query di partenza per gruppo crescente, punteggio decrescente e riuscire a creare un campo posizione che si incrementi via via e che si resetti al cambio di gruppo.

    codice:
    id_gruppo punteggio   posizione
    1         20              1
    1         19              2
    1         18              3
    1         18              4
    2         10               1
    2         10               2 
    2         10               3
    2         10               4
    3          5                1
    3          4               2
    3         3                3
    3         2                4
    In questo modo basterebbe fare, nel mio esempio, per sommare i tre punteggi maggiori di ciascun gruppo

    codice:
    select id_gruppo, Sum(punteggio) as totale
    from tabella
    where posizione < 4
    group by id_gruppo
    Purtroppo access non consente l'uso di variabili all'interno della query.
    Temo che sia necessario ricorrere a qualche escamotage in vba ma sarei felice di essere smentito.

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Adesso è perfetta e non presenta alcun problema nemmeno in caso di valori pari.
    E senza nemmeno dover ricorrere a vba.


    http://myfreefilehosting.com/f/50043005cf_0.18MB

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.