Condividi tramite

Funzione MAX tra campi

Anonimo
2015-09-07T15:54:40+00:00

Salve,

Ho una tabella contenente, tra le altre cose, tre campi contenenti dei valori. In una Query vorrei creare un campo calcolato che mi riporti, per ogni record, il valore più alto tra i tre. 

Purtroppo non ho trovato una funzione che fa al caso mio. 

Spero possiate aiutarmi.

Grazie.

Saluti.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2015-09-07T16:36:29+00:00

ciao Salvatore,

un modo.

estrai il massimo con max dei tre campi e poi passi i valori a questa funzione :

Function MaxOfList(ParamArray varValues()) As Variant

    Dim i As Integer        'Loop controller.

    Dim varMax As Variant   'Largest value found so far.

    varMax = Null           'Initialize to null

    For i = LBound(varValues) To UBound(varValues)

        If IsNumeric(varValues(i)) Or IsDate(varValues(i)) Then

            If varMax >= varValues(i) Then

'do nothing

            Else

                varMax = varValues(i)

            End If

        End If

    Next

    MaxOfList = varMax

End Function

presa qui : http://allenbrowne.com/func-09.html.

esempio:

SELECT Max(Ordini.IDOrdine) AS O, Max(Ordini.Trasporto) AS S, Max(Ordini.Corriere) AS c, MaxOfList([O],[S],[C]) AS mx

FROM Ordini;

Ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

4 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2015-09-08T08:33:50+00:00

    Ciao Salvatore,

    se il numero dei campi è 3 puoi provare anche:

    =IIF(A > B; IIF(A > C;A;C); IIF(B > C;B;C))

    Mimmo

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2015-09-08T11:59:00+00:00

    Ciao,

    prima di leggere l'ultima risposta, per provare, avevo proceduto come segue:

    ho copiato il testo della funzione in un nuovo modulo.

    Poi nella query ho semplicemente scritto: "Data_Massima: MaxOfList([Campo1];[Campo2];[Campo3])" ed ho ottenuto il risultato che cercavo (in pratica per ogni record della tabella mi mostra il valore più alto dei tre campi - che cambia da record a record).

    Grazie mille per la risposta ed il chiarimento.

    Ciao.

    Slvatore.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-09-08T10:03:19+00:00

    ciao Salvatore,

    Grazie mille per la risposta,

    prego.

    Non c'è, per esempio, la possibilità di creare una "funzione personalizzata" che faccia il lavoro e poi richiamarla nel campo calcolato della query?

    Es.: Valore max: funzione personalizzata([Campo1];[Campo2];[Campo3]).

    Access non ha funzioni intriseche come Excel per valtutare il massimo tra diverse colonne, quindi il massimo o minimo valore, lo devi individuare per ogni singola colonna, come da sql di esempio che ti ho indicato nel precedente post che ti esplicito meglio qui :

    SELECT Max(Ordini.IDOrdine) AS O,

                 Max(Ordini.Trasporto) AS S,

                Max(Ordini.Corriere) AS c

    i valori vengono passati alla funzione UDF MaxOfList (copiata in un modulo standard) che si occupa di ciclare l'array e restituire il valore massimo.

    Prediligo una funzione specifica perché indipendentemente dalla numerosità dei campi, di cui vuoi individuare il valore massimo, la funzione comunque restituisce il valore massimo.

    alla funzione passi gli alias dei campi sopra estratti con l'sql per cui avrai : 

    MaxOfList([O],[S],[C]) AS mx

    nella tua query avrai il campo calcolato mx che mostrerà il valore più alto dei campi oggetto di assegnazione del valore massimo.

    Spero di essermi spiegato un po' meglio.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-09-08T07:53:58+00:00

    Grazie mille per la risposta,

    però non mi è proprio chiaro come fare:

    1. perchè mi dici "estrai il massimo con max dei tre campi "? A me, il valore Massimo dei tre campi serve per ogni record presente in tabella
    2. cosa intendi per "poi passi i valori a questa funzione"? A me servirebbe eseguire tutto nella query per poter poi utilizzare il dato successivamente.

    Non c'è, per esempio, la possibilità di creare una "funzione personalizzata" che faccia il lavoro e poi richiamarla nel campo calcolato della query?

    Es.: Valore max: funzione personalizzata([Campo1];[Campo2];[Campo3]).

    Grazie ancora per la collaborazione.

    Saluti.

    S. Valenza.

    La risposta è stata utile?

    0 commenti Nessun commento