Somma con condizione in access

giovedì 08 luglio 2010 - 12.22

zambi4 Profilo | Newbie

Buon giorno a tutti, sono nuovo del forum e avevo un quesito da porvi, magare banale, però non ne vengo fuori...
In access ho una tabella con due colonne (sono di più ma mi servono i dati di queste due), una con i campi "Valore" e una con i campi "Offerta"...
I campi Valore contengono tutti dei numeri, mentre sui campi Offerta ce ne sono alcuni vuoti (non hanno valore 0, sono proprio vuoti...is Null)
I dati di questa tabella li ripropongo in una maschera dove devo aggiungere un campo "Totale" e quello che voglio fare è di sommare tutti i campi della colonna "Offerta" solo che dove c'è un campo Null, vorrei che automaticamente si prendesse il dato del corrispondente campo "Valore", non so se mi sono spiegato, spero di sì...

Per rendervi la cosa più chiara, vi allego un esempio della tabella in questione...

220x140 21Kb

L'espressione dovrebbe sommare le cifre 5 e 10 della colonna offerta e per gli altri campi dove ho "Null" prendere i corrispondenti importi dei campi "Valore", quindi 2,3,4 e 6...TOT=30

Chi riesce a dirmi qual è l'espressione giusta da scrivere per ottenere questo risultato?

Grazie a tutti!

lbenaglia Profilo | Guru

>L'espressione dovrebbe sommare le cifre 5 e 10 della colonna
>offerta e per gli altri campi dove ho "Null" prendere i corrispondenti
>importi dei campi "Valore", quindi 2,3,4 e 6...TOT=30
>
>Chi riesce a dirmi qual è l'espressione giusta da scrivere per
>ottenere questo risultato?

Ciao Federico,

Prova a dare un'occhiata alla seguente query:

SELECT SUM(IIF(Offerta IS NULL, Valore, Offerta)) AS Totale FROM Tabella1;

Se l'offerta è NULL allora considero la colonna Valore altrimenti Offerta ed aggrego i valori con la funzione di aggregazione SUM().

>Grazie a tutti!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

zambi4 Profilo | Newbie

Grazie per la risposta, però purtroppo non funziona...eppure lo so che mi sto perdendo in una cavolata, però non trovo la soluzione...

Ti spiego com'è organizzato il mio database...ho un'unica tabella "Giocatori" con tutti i dati dentro, poi ho 6 query, una per ogni FantaAllenatore (il tutto mi serve per gestire le aste del fantacalcio... ) chiamate appunto "Formazione Di Silvestro", "Formazione Padoan" ecc...
e poi ho creato una maschera "Squadre" e tutta una serie di sottomaschere che mi servono per riempire la maschera principale...
Come per le query, ho una sottomaschera per ogni soggetto, "Sottomaschera Di Silvestro", "Sottomaschera Padoan" ecc... che utilizzo tutte insieme in una "struttura a schede" (in pratica ho una sottomaschera dove nella parte alta ho 6 linguette, una per ogni scheda, che corrisponde alla formazione di ogni allenatore...).
Nell'ultima sottomaschera ho l'elenco di tutti i giocatori della serie A da utilizzare per comporre le nostre formazioni, con relativi prezzi e con 6 caselle di spunta, riferite ad ogni allenatore, in pratica chi compra il giocatore gli metto la spunta sul suo nome e il relativo valore d'acquisto e il tutto mi compare nella sottomaschera delle formazioni che ho spiegato prima...
Il problema della somma sta proprio quì...mi serve questo dato per controllare in tempo reale che i soldi spesi non superino un certo limite, solo che non riesco a fare sto passaggio...io nella sottomaschera delle formazioni ho i nomi dei calciatori acquistati, il loro prezzo ed eventualmente i prezzi di acquisto in caso di asta.
Ovviamente se non viene fatta nessuna asta, avrò dei campi NULL (ecco il perchè del mio quesito...)

Ho seguito il tuo suggerimento e nelle proprietà della sottomaschera, dentro Dati\Origine controllo, ho scritto la riga che mi hai detto in questo modo:

=SELECT SUM(IIF(Off D IS NULL, Valore, Off D)) AS Totale FROM Giocatori;

Dove "Off D" sta per Offerta Di Silvestro (ogni allenatore ha il proprio campo e quindi potrà fare la propria offerta).

Non mi da errori di sintassi, però così mi somma solo i valori della colonna Off D, senza andare a prendere quelli della colonna Valore, nel caso abbia un campo NULL su Off D...

Allego un'immagine della maschera così magari si capisce meglio...

1247x719 434Kb


Spero di essere stato il più chiaro possibile, vediamo se ruiscite ad aiutarmi...grazie!!!

lbenaglia Profilo | Guru

>Grazie per la risposta, però purtroppo non funziona...
Invece ti assicuro che è corretta

>=SELECT SUM(IIF(Off D IS NULL, Valore, Off D)) AS Totale FROM
>Giocatori;
Lo spazio non è un regular identifier, pertanto devi ricorrere ai brackets ([]) per referenziare un identificatore irregolare.
Che succede se scrivi:

SELECT SUM(IIF([Off D] IS NULL, Valore, [Off D])) AS Totale FROM Giocatori;

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

zambi4 Profilo | Newbie

Purtroppo succede che non funziona...

Se non ti è troppo disturbo, ti allego il database così vedi direttamente cosa c'è di sbagliato...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5