+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Ricerca su intervalli tabelle

  1. #1
    oierpa non è in linea Novello
    Luogo
    torino
    Post
    34

    Ricerca su intervalli tabelle

    Ciao a tutti.
    Ho un problema che riesco a definire con difficoltà.
    In sostanza, una tabella raccoglie, fra l'altro dei dati che racchiudono intervalli numerici ad esempio
    Classe Valore
    A 10
    B 20
    C 30
    .............
    Con una query elaboro un campo che mi da un risultato numerico che devo ricercare nella tabella, ad esempio se trovo 22,5 devo associarlo alla classe "C", se trovo 17, classe "A" e così via.
    Non so come eseguire la ricerca in modo da associare ad ogni valore numerico trovato la classe corrispondente.
    Il problema non è complicato, ma non so nemmeno come cercarlo con google.
    Spero di essere stato chiaro.
    Grazie in anticipo

  2. #2
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Post
    707
    Non è chiaro quale sia il criterio con il quale vuoi associare:
    22,5 -> classe "C"
    17 -> classe "A"
    Precisa la logica.
    Willy

  3. #3
    oierpa non è in linea Novello
    Luogo
    torino
    Post
    34
    Intanto grazie per la risposta!
    Hai ragione, ho sbagliato nel primo post, se ho 22.5 la classe è B ...
    Per come è strutturato il problema se un numero è compreso fra 10 e 19.99 la classe corrispondente è "A", se è compreso fra 20 e 29.99 classe "B" e così via.
    Ho ipotizzato una logica che fa un calcolo matematico, per cercare il valore: divido per 10, tengo solo la parte intera, rimoltiplico per 10 e cerco il valore con Dlookup, così: 17.5/10=1.75, la parte intera è 1, moltiplico per 10 =>10 cerco 10 con Dlookup e trovo la classe "A".
    Ma credo esista un metodo meno barbaro di questo ....
    Spero sia un po' più chiaro

  4. #4
    OsvaldoLaviosa non è in linea Topo di biblioteca
    Luogo
    Conversano
    Post
    2,988
    Il ragionamento logico/matematico è corretto. Si tratta solo di automatizzarlo a puntino con un query, anche se fai calcoli su molti campi calcolati, e il gioco è fatto.
    Ditemi i campi di tutte le vostre tabelle.

  5. #5
    L'avatar di nman
    nman non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,666
    Quote Originariamente inviato da oierpa Visualizza il messaggio
    ...... Con una query elaboro un campo che mi da un risultato numerico che devo ricercare nella tabella, ad esempio se trovo 22,5 devo associarlo alla classe "C", se trovo 17, classe "A" e così via. ......
    Se la regola del 10 è eternamente immutabile allora potrebbe essere corretto quello che proponi
    ma se potrebbero esserci dei cambiamenti allora consiglio una minitabella di questo tipo:
    -- Classe ---- Valore Fino a
    ----- A ----------- 10
    ----- B ----------- 20
    ----- C ----------- 30
    ----- D ----------- 42
    ----- E ----------- 58
    ----- F ----------- 70
    .............
    Poi con una query ti estrai la tua classe dal tuo valore
    .

  6. #6
    L'avatar di willy55
    willy55 non è in linea Scribacchino
    Post
    707
    In base all'esempio riportato, il primo intervallo è più ampio degli altri, quindi per valori inferiori a 10 l'algoritmo individuato non sarebbe valido, in tal caso una soluzione è impiegare, in codice VBA, lo statement Select ... Case :
    https://docs.microsoft.com/it-it/dot...case-statement
    https://www.techonthenet.com/access/...anced/case.php
    SELECT CASE Statement | Database Solutions for Microsoft Access | databasedev.co.uk
    o in alternativa impiegare delle istruzioni IIF nidificate:
    https://support.office.com/it-it/art...0-647539c764e3
    https://support.office.com/it-it/art...e-660a34cc6555
    IIF nidificato
    https://forum.ialweb.it/forum_posts....plice-ciclo-if
    http://www.simply-access.com/Nested_IIF_Statement.html
    Ultima modifica di willy55; 04-04-2019 20:48 
    Willy

  7. #7
    L'avatar di Max.Riservo
    Max.Riservo ora è in linea Scribacchino
    Post
    715
    Occorrerebbe conoscere i limiti .....
    Comunque supponendo che tu parta da 10 (a cui associ la classe A) e ogni 10 associ la classe successiva (seguendo le lettere dell'alfabeto) questo potrebbe fare al caso tuo :
    codice:
    MyClass = chr(65 + ((MyNumber - 10) \ 10))
    Ovviamente occorre aggiungere qualche test sui limiti .....

  8. #8
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,984
    SELECT TOP 1 Classe FROM Tabella WHERE Valore < [parametro] ORDER BY Valore DESC

    Impostare [parametro] al valore del quale si vuole ottenere la classe corrispondente.
    Decidere se la ricerca va fatta per "<" o "<=".

    Ciao.
    Il regolamento del forum: la prima cosa da leggere.

  9. #9
    oierpa non è in linea Novello
    Luogo
    torino
    Post
    34
    Ciao a tutti.
    Grazie per le tante risposte.
    Ieri quando ho scritto non avevo sotto mano la tabella reale, che mi hanno dato stamattina e i dati cambiano un pochino ma non la sostanza.
    Gli step non sono di 10 in 10 ma di 100 in 100, i limiti sono da 100 a 2400 e la logica è:
    da 1 a 99 devo considerare come se fosse 100, da 101 a 199 come se fosse 200 e così via.
    Sulla base di quanto abbiamo detto ieri ho adattato il calcolo come:
    1. calcolo int(valore/100)
    2. aggiungo 1
    3. moltiplico per 100
    4. cerco il valore così trovato e identifico la classe.
    Il sistema funziona, lo perfeziono per i limiti dei campi in modo da evitare problemi.
    Volevo però trovare una soluzione più generale, perché in questo caso con un artificio matematico riesco a risolverlo, se un domani ho un problema anologo su un campo di valori più esteso diventa più difficile trovare una soluzione di questo tipo, perciò mi chiedevo se esistesse un modo per fare la ricerca per valore più "vicino" su tutta la tabella ed estrarre la mia classe (in questo caso, ma può essere altro).
    La soluzione che usa select case è la prima che mi era venuta in mente, ma non è molto diversa da quella con l'artificio matematico adottato.
    Grazie ancora

  10. #10
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    388
    Quote Originariamente inviato da oierpa Visualizza il messaggio
    ...Volevo però trovare una soluzione più generale...
    Il post precedente di Brontolo è la risposta al tuo problema. Io risolsi in maniera identica una ricerca di sconti da applicare in base all'importo. Così anche se editi la tabella inserendo nuovi step o modificando i precedenti hai sempre il valore corretto, senza passare da delle formule matematiche o del codice che dovresti adattare ogni volta che modifichi la tabella.

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi