[ACCESS 2010] Gestire il risultato nullo di una query

lunedì 17 settembre 2012 - 18.25

thebusterazz Profilo | Newbie

ciao ragazzi, vorrei fare in modo che se la query non trova nessun record che rispetti un criterio particolare, invece di restituirmi il campo calcolato nullo, questa mi restituisca il valore zero.

se per esempio il mio campo calcolato si chiama "somma", attualmente se non trova nulla il risultato è una casella con valore null( di difficile gestione ). Vorrei che invece mi dia valore zero.
Avete idee?



access 2010
windows 7

antonio

nman Profilo | Newbie

Scusate ho sbagliato a postare

renarig Profilo | Expert

Esiste la specifica funzione "Nz" ( Null to 0 )
che ti trasforma il valore Null in 0 ( o quello che preferisci )

____ Esempi
Nz(NomeCampo;0)
Nz(NomeCampo;187)
Nz(NomeCampo;"xxx")


__________________________________________________



Attento pero.

se si tratta per esempio della somma di 2 numeri

per Access 2 + null = null
tu invece forse vuoi che sia 2 + null = 2


Allora il Nz non lo devi applicare
al risultato ma ai 2 addendi



thebusterazz Profilo | Newbie

Ma devo inserire questo codice nel codice SQL della query:)?

renarig Profilo | Expert

>Ma devo inserire questo codice nel codice SQL della query:)?


Certo:


Se hai la tabella "Tab"
con i campi:
__ Costo ___ Numerico
__ Utile ___ Numerico

_________________________________________

Con questa Query ti ritrovi il tuo problema

SELECT
Tab.Costo,
Tab.Utile,
[Tab]![Costo]+[Tab]![Utile] AS Totale
FROM
Tab
;


_________________________________________

Con quest' altra invece risolvi

SELECT
Tab.Costo,
Tab.Utile,
Nz(Tab!Costo,0)+Nz(Tab!Utile,0) AS Totale
FROM
Tab
;

______________________________


Facci sapere

.







thebusterazz Profilo | Newbie

raga continua a non funzionarmi.. è corretta la mia implementazione

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

renarig Profilo | Expert

Se ho capito bene tu vuoi la somma ( 1 solo numero )
degli assegni emessi fra 2 date e con una causale specifica

Giusto ?

Mi sa che non era il Nz a crearti problemi.


Prova cosi:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

thebusterazz Profilo | Newbie

mmm.. mi spieghi la sintassi che hai utilizzato? e la differenza presente con la mia?

renarig Profilo | Expert

Ma funziona ?

.

thebusterazz Profilo | Newbie

No, nulla ancora :|

renarig Profilo | Expert

Non è che ti sprechi molto a scrivere

Sarebbe interessante sapere anche perche non funziona


___________________________________________________________


Per quanto riguarda la differenza fra le sintassi io direi che
la fondamentale è che io ho teso ( senza sapere cosa ti serve )
a darti un totale unico nel range di date prefissato

Infatti non ho scritto la data bensi una "v" ( la "v" è un valore casuale )

che poi nel raggruppamento si condensa in un sol record

se avessi lasciato la data avremmo avuto 1 record per ogni gruppo di date diverse

________________________________________________________

Facci un miniesempio dei:

___Dati di tabella

___le 2 date di Between

___Quello che vuoi ottenere


Saluti


.

thebusterazz Profilo | Newbie

Scusami se risulto telefrafico. In pratica il codice non funziona in quanto il risultato risulta comunque una casella nulla.

In pratica questa query mi è necessaria per conoscere settimanalmente, ed ecco il perchè dell'intervallo delle due date, l'importo totale degli assegni emanati.
Quindi la mia query non fa altro che:

1) Prende i due parametri di data (beetwen) relativi alla settimana di cui si vuole fare l'analisi
2) fa la somma di tutti gli importi ( l'importo è un campo della tabella :"Assegni")

il problema è semplice, come ho gia avuto modo di scrivere: finche sono presenti assegni in quell'intervallo di date la query mi restituisce correttamente il valore somma; tuttavia qualora non sono presenti assegni in quel dato intervallo, la query non mi da zero (come vorrei) ma semplicemente è vuota! Questo è un problema per me, perché non mi permette di gestire correttamente questo valore. Il valore null è sempre una bella rogna :|

grazie mille per la pazienza comunque, speriamo di riuscire a risolvere perchè ad ora mi obbliga a dover inserire degli assegni a importo nullo nell'intervallo di date in cui non sono presenti assegni

renarig Profilo | Expert

Adesso mi è piu chiaro:

Il tuo problema non è di trasformare un valore Null in zero.

il tuo problema invece è che talvolta NON hai record che soddisfano i criteri impostati


Pertanto anche se usi la funzione Nz continui a NON avere record.


________________________________________________________________

La soluzione sarebbe gestire a valle i record assenti

______________________________________________________________

Ma con un artefizio ( che non mi piace ) possiamo:

Dopo avere filtrato i record sulle date

UNIRLI a un record " artificiale" che abbia sempre valore di Importo = 0

Poi facciamo la SUM del tutto e uno 0 te lo trovi sicuramente sempre

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


Facci sapere





thebusterazz Profilo | Newbie

sei un boss, funziona alla grande :D Mi potresti tuttavia spiegare cosa rappresenta quel q4 e come hai trovato la soluzione al problema?
ti ringrazio infinitamente comunque :D

renarig Profilo | Expert


>come hai trovato la soluzione al problema?

Per aggiungere un record "artificiale" ho fatto una query di unione
fra i dati GIA filtrati e un'altra query che restituisce sempre
un record con scritto 0

Questa query la ho chiamata ( per mio guto ) "Q4"
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Osserva che c'e un "UNION" che unisce ( e demarca ) 2 query distinte

__ La prima
______ non restituisce nulla se nel campo di date non c'è niente
______ restituisce molte righe se nel campo di date ci sono molti assegni

__ La seconda
______ restituisce sempre e solo uno 0



___________________________________________________________________


Dopo devi sommare i valori di Q4 quindi fai la query "Q5":
SELECT Sum(Q4.Importo) AS [Importo totale] FROM Q4 ;


________________________________________________________________


>cosa rappresenta quel Q4




Sei arrivato alla soluzione ma hai 2 query distinte mentre
e piu bello averne 1 sola

Quindi modifichi Q5 um questo modo

SELECT Sum(Q4.Importo) AS [Importo totale] FROM ( ...... Il testo integrale di Q4 ( senza il ; finale ) ....... ) AS Q4 ;

e arrivi appunto alla soluzione finale
che ti ho proposto sopra


.


thebusterazz Profilo | Newbie

perfetto :D chiarissimo !!

sei stato gentilissimo !
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5