Sottrazione tra records

di il
13 risposte

Sottrazione tra records

Ciao, sono alle prese con un problema la cui soluzione è probabilmente più banale di quella che immagino.
Ebbene 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. Pensavo forse di cavarmela con la formattazione condizionale ma non sono certo che funzioni.
Avete qualche idea al riguardo?
Spero di essere stato suffcientemente chiaro nella esposizione del problema.
Ciao
Fausto

13 Risposte

  • Re: Sottrazione tra records

    Ciao.
    provo a suggerirti questa soluzione, 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;

    può andare?
    un saluto.
  • Re: Sottrazione tra records

    Grazie mille goku, il suggerimento è veramente interessante ma benchè sono sicuro che mi tornerà prima o poi utile, non è quello che stavo cercando, o meglio quello che mi servirebbe è a mio vedere molto più semplice. Hai presente quando nel pie di pagina di una maschera o un report che riporta un elenco di record tu inserisci un campo che fa la somma di un determinato campo di tutti i record dell'elenco? Beh a me servirebbe invece una sottrazione tra i campi di due record. Io devo sottrarre i valori mensili del fatturato dai valori dell'ordinato per trovare il delta. Tutto qui. Mi viene suggerito di esportare in excel per fare la sottrazione ma io non posso credere che access non possa farlo. Ecco perchè ho pensato alla formattazione condizionale. Se il record contiene il valore ordinato allora il campo lo formatto come negativo altrimenti è positivo... funzionerà?
    Grazie comunque del suggerimento, mi sarà sicuramente utile.
    Ciao
    Fausto
  • Re: Sottrazione tra records

    Ciao,
    Non ho capito molto lo scenario...
    tu hai una maschera che riporta le mensilità, e per ogni mensilità, hai il fatturato e l'ordinato e devi calcolare la differenza tra fatturato e ordinato per ogni mese :
    cioè questo :

    mese ordinato fatturato differenza
    Gennaio 1000 500 500
    Febbraio 1500 2000 -500
    Marzo 500 800 -300
    Aprile 1000 0 1000
    ....
    Dicembre 1500 800 700

    è corretto ?
    se si con una query puoi calcolare la differenza tra i campi fatturato e ordinato, con un campo calcolato (differenza:fatturato-ordinato) e lo vuoi fare in una maschera inserisci un casella di testo e ci scrivi =fatturato-ordinato.

    Se non è così spiega meglio...da come spieghi sotto sembra che ordinato e fatturato siano contenuti sullo stesso campo della tabella...

    fcasini ha scritto:


    Se il record contiene il valore ordinato allora il campo lo formatto come negativo altrimenti è positivo... funzionerà?
    un saluto.
  • Re: Sottrazione tra records

    Grazie mille Goku, provo a spiegarmi meglio perché la tabella non è così come tu l'hai rappresentata, segno che non sono stato sufficientemente chiaro nella esposizione.
    Dunque, immagina di avere una tabella che contiene 13 campi, 12 di tipo valuta ed 1 di tipo testo.
    Nei dodici campi valuta nominati Gennaio, febbraio, marzo e così via vengono archiviati dei valori economici la cui caratterizzazione è data dal 13° campo testo che può contenere il valore "Ordinato" oppure "Fatturato".
    In sostanza mi ritrovo con una tabella con due record, il primo relativo al valore mensile dell'ordinato mentre nel secondo viene archiviato il valore mensile del fatturato tipo:

    [CAUSALE] GENNAIO FEBBRAIO MARZO….
    ORDINATO 1000 1500 2000
    FATTURATO 800 1300 1600

    Quello di cui avrei bisogno è, in una maschera (o in una query) un totale di quei 12 campi mese rappresentato dalla differenza tra [FATTURATO]-[ORDINATO] mensile e quindi totale.
    Non posso archiviare valori negativi poiché questi arrivano come output di un sistema aziendale ed oltretutto mi servono positivi per fare altre operazioni.
    Tieni presente che la sottrazione sarà sempre e solo tra due record e la tabella, o meglio la query su cui si effettuerà l'operazione conterrà sempre e solo questi due records.
    quindi, sperando che ora il quesito sia più chiaro, come posso fare?
    grazie mille per la pazienza ed il tempo dedicato.
    ti auguro una buona settimana
    ciao
    fausto
  • Re: Sottrazione tra records

    Ciao.
    questo che ci mostri :

    [CAUSALE] GENNAIO FEBBRAIO MARZO….
    ORDINATO 1000 1500 2000
    FATTURATO 800 1300 1600

    è la visualizzazione tipica di Excel, Access è un DB e funziona diversamente.

    se riesci ad impostare la tabella in questo modo :
    id_mese
    mese
    ordinato
    fatturato

    in modo da avere i dati visualizzare i dati così _
    id_mese mese ordinato fatturato
    1 gennaio 1000 500
    2 febbraio 500 400
    ....e così via, non credo sia un problema visto che sono dati estratti da sistema.

    imposti in una query su quella tabella un campo calcolato cosi :

    differenzaFatturatoOrdinato: [fatturato]-[ordinato]

    e calcoli la differenza e una subquery :

    totaleDifferenza: (select sum(fatturato-ordinato) from T_dati)

    per il totale della differenza.
    facci sapere.
    un saluto.
  • Re: Sottrazione tra records

    Grazie Goku, tempestivo ed efficace come sempre.
    Purtroppo il sistema aziendale estrae i dati in formato excel esclusivamente in questo modo, con 12 colonne riferite al mese ed un campo che riporta in realtà diversi step di autorizzazione tra i quali quelli che mi interessano sono quelli che ti ho citato.
    Potrei effettivamente fare una tabella come tu suggerisci ma questo mi costringerebbe ad effettuare una operazione sul file excel (immagino qualcosa di simile ad un Matrice-Trasposta o comunque creare un foglio di appoggio) per renderlo conforme alla tabella di input di access. Faccio prima a fare il contrario, ossia come procedo ora, esportando tali dati in excel ed effettuare i report con tale strumento.
    Grazie comunque di tutto l'aiuto, se riesco ad individuare una soluzione sarò ben felice di condividerla.
    ciao
    fausto
  • Re: Sottrazione tra records

    Ciao,
    beh, in realtà, il subject di questo 3d è un po' fuorviante...nel senso che hai un file di Excel che vorresti importare in access per effettuare ulteriori calcoli.

    Ho fatto dei test, importando un file Excel utilizzando il wizard di Access e ho provato a scrivere i dati in una tabella, per poi effettuare i calcoli risolvendo la query che ti ho suggerito.
    Ottengo il risultato voluto.

    Un'atra soluzione è quelle di aprire il file di xls da access ed andare a scrivere i dati che ti servono in una tabella.

    La prima è prima delle due è la più immediata e forse più facile da realizzare.
    In pratica con una sub imposto e apro due recordset uno è la tabella importata e l'altro e la tabella da impostare come da precedente post.
    Con un ciclo do while....loop fino a EOF in cui c'è un for...next, ciclo i records della tabella importata e imposto via via i dati nella tabella di destinazione....
    E' più difficile a dirsi che a farsi...

    ti dirò, se devi semplicemente calcolare la differenza di cui ci hai detto, forse non vale la pena usare Access, ovvio che se i dati li devi manipolare diversamente il discorso è diverso.

    un saluto.
  • Re: Sottrazione tra records

    È passato un po' di tempo ma la soluzione alla fine l'ho trovata. Ho creato una maschera che contiene al suo interno due sottomaschere che filtrano una i record dell'ordinato e l'altra quelli del fatturato, entrambe collegate allo stesso [id_prodotto] presente nella maschera principale dove nella parte inferiore ci sono i campi con le differenze tra i campi dei record delle due sottomaschere. Un po' macchinoso ma funziona e dimensionando opportunamente le sottomaschere il risultato non è affatto male.
    ciao Goku, alla prossima
    fausto
  • Re: Sottrazione tra records

    Buongiorno
    ho provato il codice di Goku come riportato all'inizio del post ma non funziona, nel senso che, 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.
    Grazie
  • Re: Sottrazione tra records

    E si vede che sei alla prima esperienza ...

    Non si continua a scrivere in thread così vecchi ... addirittura di 4 anni fa !
  • Re: Sottrazione tra records

    Buongiorno,
    mi interessava l'argomento... comunque come si procede perchè è proprio quello scritto nel thread che sto provando ma non funziona come già detto.
  • Re: Sottrazione tra records

    Crea un tuo nuovo thread, spiega il problema, indica la soluzione adottata e gli eventuali errori. Eventualmente fai riferimento ai vecchi thread con un link.
  • Re: Sottrazione tra records

    Grazie procedo come indicato.
Devi accedere o registrarti per scrivere nel forum
13 risposte