Numero graduatoria

di il
10 risposte

Numero graduatoria

Buonasera, vorrei chiedere aiuto per un problema che non so proprio come risolvere.
Ho una query dove in base all'ufficio che seleziono, escono fuori tutti gli impiegati che hanno richiesto di essere assegnati presso quell'ufficio.
Tale risultato è già impostato per formare una graduatoria in base a dei criteri (anzianità di servizio dell'impiegato, data presentazione domanda, ecc).
Non riesco però a creare una colonna che mi indichi la posizione in graduatoria, una sorta di conteggio, tipo:
dipendente A 1
dipendente B 2
dipendente C 3
ecc.

anche perchè quando sono tanti dipendenti non è semplice andare a contare tutte le righe.

Inoltre, qualora riuscissi a capire come fare, riutilizzerei tale dato per una eventuale maschera dove, una volta ricercato l'impiegato, mi fuoriesce direttamente la posizione in graduatoria.

Tenuto conto che non sono un fulmine di guerra in access, ringrazio anticipatamente chi mi voglia aiutare

10 Risposte

  • Re: Numero graduatoria

    Esponi dettagliatamente:
    - nomi propri di tutte le tabelle che entrano in gioco
    - nomi propri di tutti i loro campi con indicazione della chiave primaria
    - le relazioni
    - rispiega tutto usando i nomi propri
    In alternativa ai primi 3 punti potresti allegare una immagine della Finestra Relazioni.
  • Re: Numero graduatoria

    Tabella ANAGRAFICA (Matricola, Cognome, Nome, Data_Nascita, Comune_Nascita)
    Tabella ISTANZE (Matricola, data istanza, Anzianità servizio, livello azienda, Codice_Ufficio_Richiesto)
    Tabella CODIFICA_UFFICI (Codice_Ufficio, Nome_Ufficio)

    La tabella ANAGRAFICA è collegata con ISTANZE, attraverso la "Matricola", in modo "uno a molti", nel senso che un impiegato può presentare più istanze. la Tabella ISTANZE è collegata a sua volta con la tabella CODIFICA_UFFICI attraverso il Codice_Ufficio.

    la graduatoria è formata in base ai seguenti criteri in ordine di importanza
    1 Anzianità servizio
    .........a parità di anzianità
    2 livello azienda
    .........a parità di livello azienda
    3 data istanza

    spero di essere stato chiaro, anche perchè non conosco benissimo i termini "tecnici"
  • Re: Numero graduatoria

    spaidaman82 ha scritto:


    ...
    Tale risultato è già impostato per formare una graduatoria in base a dei criteri (anzianità di servizio dell'impiegato, data presentazione domanda, ecc).
    Non riesco però a creare una colonna che mi indichi la posizione in graduatoria, una sorta di conteggio, tipo:
    dipendente A 1
    dipendente B 2
    dipendente C 3
    ...
    Qui trovi una domanda simile alla tua Numero progressivo di riga in una query
    Riporto la soluzione pubblicata da Giorgio Rancati
    purtroppo il motore Jet non ha una funzione nativa per contare le righe,quindi le soluzioni non saranno molto performanti su tabelle con molte
    righe.
    Di seguito due esempi che puoi provare nel database di esempio NorthWind versione 2002/2003 creando una nuova query e selezionando la tabella Clienti

    1) con funzione DCount
    Contatore: DCount("IdCliente";"Clienti";"IdCliente<='" & [IdCliente] & "'")

    2) con subquery
    Contatore: (SELECT COUNT(*) FROM Clienti AS C WHERE C.IdCliente<= "'" &
    Clienti.IdCliente & "'")

    se il tuo campo di riferimento è numerico togli gli apici

    es..
    Contatore: DCount("Id";"Tabella1";"Id<=" & [Id])
    Occhio che qui si fa riferimento a tabelle, tu devi applicare il DCount sulla query e che il criterio è sempre e solo la chiave primaria. Quello che ottieni è un campo calcolato che è conseguenza di un ordinamento che devi aver già ottenuto nella query con i "tuoi criteri", non è questo campo calcolato che forma la graduatoria.
    EDIT (grande come una casa): fermi tutti! Ho sbagliato un po' tutto.
  • Re: Numero graduatoria

    In questo esempio idCliente porta alla stesura della graduatoria, invece a me la Matricola ( che sarebbe, se non ho capito male, l'idCliente dell'esempio) non è un criterio valido formazione della graduatoria. Non lo so, seguendo l'esempio io dovrei fare tipo
    DCount("Matricola";"Query";"come li inserisco i criteri?'")
    Scusa ma probabilmente è oltre le mie pochissime conoscenze
  • Re: Numero graduatoria

    spaidaman82 ha scritto:


    ...
    Scusa ma probabilmente è oltre le mie pochissime conoscenze
    Le tue pochissime conoscenze sono state portate fuori strada dal mio suggerimento che mi sono reso conto non essere adatto alla situazione.
    Dopo aver riletto tutto, tra l'altro, non saprei come aiutarti se non con la creazione di una funzione che fa uso di VBA e lì il problema è notevole perché mi sembra di intuire che non sapresti da che parte iniziare. Devo pensarci meglio e nel frattempo qualcun altro sarà di maggiore aiuto.
    Comunque pubblica la SQL della query che dà il risultato della graduatoria, forse qualche spunto viene. (la sql di una query la trovi selezionando il pulsante vicino alla visualizzazione foglio dati e visualizzazione struttura della query)
  • Re: Numero graduatoria

    SELECT TAB_Anagrafica.MATRICOLA, TAB_Anagrafica.COGNOME, TAB_Anagrafica.NOME, TAB_Anagrafica.DATANASCITA, TAB_Anagrafica.Comune_nascita, TAB_Anagrafica.PROVNAS, TAB_Istanze.data_istanza, TAB_Istanze.[Anzianità servizio], TAB_Istanze.Livello_Azienda, TAB_Codifica_Uffici.Nome_Ufficio
    FROM (TAB_Anagrafica INNER JOIN TAB_Istanze ON TAB_Anagrafica.MATRICOLA = TAB_Istanze.Matricola) INNER JOIN TAB_Codifica_Uffici ON TAB_Istanze.Codice_Ufficio_Richiesto = TAB_Codifica_Uffici.Codice_Ufficio
    GROUP BY TAB_Anagrafica.MATRICOLA, TAB_Anagrafica.COGNOME, TAB_Anagrafica.NOME, TAB_Anagrafica.DATANASCITA, TAB_Anagrafica.Comune_nascita, TAB_Anagrafica.PROVNAS, TAB_Istanze.data_istanza, TAB_Istanze.[Anzianità servizio], TAB_Istanze.Livello_Azienda, TAB_Codifica_Uffici.Nome_Ufficio, TAB_Istanze.data_istanza
    HAVING (((TAB_Codifica_Uffici.Nome_Ufficio)=[INSERISCI NOME UFFICIO]))
    ORDER BY TAB_Istanze.[Anzianità servizio], TAB_Istanze.Livello_Azienda, TAB_Istanze.data_istanza;
  • Re: Numero graduatoria

    Philcattivocarattere ha scritto:


    spaidaman82 ha scritto:


    ...
    Scusa ma probabilmente è oltre le mie pochissime conoscenze
    Le tue pochissime conoscenze sono state portate fuori strada dal mio suggerimento che mi sono reso conto non essere adatto alla situazione.
    Dopo aver riletto tutto, tra l'altro, non saprei come aiutarti se non con la creazione di una funzione che fa uso di VBA e lì il problema è notevole perché mi sembra di intuire che non sapresti da che parte iniziare. Devo pensarci meglio e nel frattempo qualcun altro sarà di maggiore aiuto.
    Comunque pubblica la SQL della query che dà il risultato della graduatoria, forse qualche spunto viene. (la sql di una query la trovi selezionando il pulsante vicino alla visualizzazione foglio dati e visualizzazione struttura della query)
    I progressivi nelle Query sono "delicati"... soprattutto se si da poi la possibilità di RIORDINARE i dati... se poi i dati cambiano... un massacro.
    In questi casi, la soluzione migliore è avere una Tabella Temporanea(di servizio), oppure popolare una ListBox(non associata ma in Elenco Valori), oppure un Recordset ADO in memoria, l'importante sia un oggetto statico(anche un Array ma la ListBox è di fatto un Array), e scrivere il Valore del Progressivo alla prima, poi se si cambia l'ordine o altro... i numeri rimangono fissi.
    Cosa diversa se si usasse un Report, li metti la TextBox con Valore 1 ed incrementale.
  • Re: Numero graduatoria

    Oltre ai suggerimenti di Alex, se comprendi un po' l'inglese : https://stackoverflow.com/questions/14683226/how-to-show-row-number-in-access-query-like-row-number-in-sql ... per altri risultati ricerca : access row number
  • Re: Numero graduatoria

    Visto quanto descritto nei post ed in particolare:

    spaidaman82 ha scritto:


    la graduatoria è formata in base ai seguenti criteri in ordine di importanza
    1 Anzianità servizio
    .........a parità di anzianità
    2 livello azienda
    .........a parità di livello azienda
    3 data istanza


    ....
    ORDER BY TAB_Istanze.[Anzianità servizio], TAB_Istanze.Livello_Azienda, TAB_Istanze.data_istanza;
    Se non si dispone di una chiave primaria che segue l'ordinamento, si può comunque impiegare una chiave che sia l'unione dei tre campi, purché questi forniscano, nel loro insieme, una univocità equivalente ad una Primary Key.
  • Re: Numero graduatoria

    Grazie delle risposte, scusate il ritardo ma sto leggendo solo ora. Grazie veramente a tutti.
    Adesso cerco di provare seguendo i consigli che mi avete fornito e vi aggiorno caso mai a qualcuno interessa
Devi accedere o registrarti per scrivere nel forum
10 risposte