Sottrazione tra records dello stesso campo.

di il
6 risposte

Sottrazione tra records dello stesso campo.

Buongiorno,
devo fare qualcosa di simile al post che ho trovato sul Forum che riporto di seguito:

…. da una tabella devo effettuare una sottrazione tra i campi di due record diversi. Mi spiego meglio: il valore del campo A del record 1 deve essere sottratto dal valore dello stesso campo A del record 2. È chiaro che entrambi i valori sono positivi ed essendo questi necessari per altri conteggi non posso trasformarli in valori negativi


….. Questa è la soluzione che era stata data dall’Utente Goku: inserendo un campo calcolato ottenuto con una subQuery.

tabella2 cosi costituita
id_numero -->PK
numero --> campo numerico

valori :
id_numero numero
1 33
2 55
3 60
4 90
5 99

ottieni :

id_numero numero calcola
1 33 null
2 55 22
3 60 5
4 90 30
5 99 9

in questo modo :

SELECT Tabella2.id_numero, Tabella2.numero, [numero]-(select top 1 numero
from tabella2 as r1
where r1.id_numero<tabella2.id_numero order by id_numero desc) AS calcola
FROM Tabella2;


se vuoi evitare il null del primo record :

SELECT Tabella2.id_numero, Tabella2.numero, nz([numero]-(select top 1 numero
from tabella2 as r1
where r1.id_numero<tabella2.id_numero order by id_numero desc),0) AS calcola
FROM Tabella2;



Ho provato il codice di Goku come riportato ma non funziona, ho creato la tabella come indicato e ho riporto il codice in un campo calcolato nella Tabella2.
Nel momento che salvo mi dice di dare un nome al campo, metto il nome e riprovo a salvare ma mi dice "Espressione non supportata per la conversione).
Ho cercato il significato e aiuto ma mi sono arenato.
Uso access 2013
Sono alla mia prima esperienza assoluta su un forum.
Per completezza riporto anche il link thread originale:

Grazie

6 Risposte

  • Re: Sottrazione tra records dello stesso campo.

    Descrivi, in dettaglio, quale sia la tua specifica esigenza, in quanto non è chiaro lo scenario, in ogni caso, considera che per i valori nulli si impiega la funzione ISNULL e con un report è possibile ottenere le operazioni algebriche fra i record (con somma/sottrazione); inoltre puoi vedere questa discussione:
    http://forum.ialweb.it/forum_posts.asp?TID=1625706
  • Re: Sottrazione tra records dello stesso campo.

    Grazie dei tuoi suggerimenti, vado a vedere la discussione.
    Comunque quello che ho fatto è proprio l'esercizio (esempio) indicato nel vecchio post, l'ho replicato ma come detto non funziona, eppure sembra banale!
    Ho fatto questa prova, perchè mi interessano le operazioni tra dati (numeri) di uno stesso campo, in particolare la sottrazione del vaolre (numero) tra l'ultimo record e quello immediatamente precedente di uno stesso campo.
  • Re: Sottrazione tra records dello stesso campo.

    Buongiorno,
    sto provando a replicare il codice indicato nella discussione, anche se nel mio caso NON mi interessa la parte riguardante l'ordine di posizione, perché la mia tabella va in ordine di ID.

    Ho creato la tabella tblCashFlow con i campi:
    ID DtaOperazione importo

    Ho creato la realativa query qryTotaleCashFlow

    Ho creato il modulo PosizioneNelRecordsetPerCash con il seguente codice:
    Function PosizioneNelRecordsetPerCash(MyInteger As Integer) As Integer
    Dim db As Database
    Dim rs As Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("qryTotaleCashFlow", dbOpenDynaset)
    With rs
        .FindFirst ("[ID] = " & CLng(DLookup("[ID]", "qryTotaleCashFlow", "[ID] = " & MyInteger)))
        PosizioneNelRecordsetPerCash = .AbsolutePosition + 1
    End With
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    End Function
    adesso non ho capito come procedere e più precisamente come devo impiegare il restante codice indicato nella discussione di seguito riportato:
    SELECT PosizioneNelRecordsetPerCash([ID]) AS Posiz, tblCashFlow.*, CCur(DSum("Importo","qryTotaleCashFlow","[Posiz] <= " & [Posiz])) AS TotaleProgressivoCalcolato
    FROM tblCashFlow
    ORDER BY tblCashFlow.DataOperazione;
  • Re: Sottrazione tra records dello stesso campo.

    X darki: ho formattato il tuo ultimo post con il tag code. I prossimi messaggi formattali tu, ok?
  • Re: Sottrazione tra records dello stesso campo.

    Non sono pratico ma avevo letto la cosa nel regolamento. Grazie per avermelo ricordato.
  • Re: Sottrazione tra records dello stesso campo.

    Ok... ho riprovato il primo codice FUNZIONA!
    Dopo giorni di prove e testate sono tornato all'inizio e ho riprovato il codice di Goku!
    contentissimo che abbia funzionato... ma non ho capito perché all'inizio mi dava quel problema!
    Comunque per chiarezza riporto l'esercizio fatto (Grazie Goku)

    tabella2 cosi costituita
    id_numero -->PK
    numero --> campo numerico

    valori :
    id_numero numero
    1 33
    2 55
    3 60
    4 90
    5 99

    ottieni :

    id_numero numero calcola
    1 33 null
    2 55 22
    3 60 5
    4 90 30
    5 99 9

    in questo modo :
    SELECT Tabella2.id_numero, Tabella2.numero, [numero]-(select top 1 numero 
    from tabella2 as r1
    where r1.id_numero<tabella2.id_numero order by id_numero desc) AS calcola
    FROM Tabella2;
    Come detto FUNZIONA.

    Adesso mi piacerebbe tanto anche capire l'esempio di Willy, ma la vedo dura!
Devi accedere o registrarti per scrivere nel forum
6 risposte