Newsgroup: it.comp.appl.access
Titolo: UNION di query con possibilità di una senza alcun record nel risultato

Ciao a tutti, ho una tabella che, tra gli altri campi, ne ha alcuni di tipo sì/no relativi 
a delle causali, sui quali devo fare una statistica per valutare la percentuale di 
incidenza di ogni causale, creando un grafico.
Lavoro con Access 97.
La struttura dati non è stata creata da me, e vorrei non modificarla.
Per fare questa classifica, ho creato una query per ogni causale, inserendo la formula 
Conteggio per il campo di cui si occupa la query, e creando campi vuoti per poter fare poi 
la union.
l'ultima query esegue una serie di union, ma ovviamente nel caso in cui anche una sola 
delle query precedenti non abbia alcun record come risultato, perchè quella causale non è 
stata usata, non ottengo comunque alcun risultato.
L'unico modo che mi è venuto in mente per superare il problema è via codice, usando una 
tabella temporanea con un campo per ogni causale, di tipo numerico e di valore predefinito 
0: eseguendo via codice ognuna delle query posso ottenere il numero di ricorrenze e 
gestire la possibilità che il recordSet sia nullo.
Dovrei quindi basare il grafico su tale tabella, la quale quindi va ripulita prima di ogni 
utilizzo.
Il problema è la multiutenza, in tal caso, giusto?
C'è modo di ottenere la base per il grafico senza codice?
Spero d'esser stato chiaro...
grazie, Alessio


usa nz per i valori nulli o meglio i Join di tabelle derivate per i calcoli
es
Invece di 
SELECT id, (SELECT SUM(Qta) as C FROM Vendite as V WHERE V.motivazione = 1 And V.rif = A.id) as Vendite FROM articoli as A
usa 
SELECT A.id, V.Vendite FROM Articoli as A LEFT JOIN 
(SELECT SUM(Qta) as Vendite, V.rif FROM Vendite GRUOP BY V.rif, motivazione HAVING V.Motivazione = 1 ) 
as Ven ON A.id = ven.rif
Occhio che l'ho scritta a volo e non l'ho vericata, ma il concetto è quello
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access

 
Ciao Massimiliano, grazie per la tua risposta, innanzi tutto.
Per quanto riguarda l'uso di NZ, l'ho provato ma, nel caso in cui non ci siano record, NZ 
non funziona.
Non mi è chiaro ciò che intendi parlando delle tabelle derivate per i calcoli, anche 
guardando il tuo esempio; comunque credo che esso si possa applicare solo al caso di due 
tabella, non di una, in quanto nel tuo esempio il'ID articolo esiste ed il LEFT JOIN 
mostra l'ID con un campo Somma, a destra, vuoto.
Io lavoro su una sola tabella, chiamata NOTIFICHE, della quale i campi che interessano 
solo soltanto ANNO (faccio ricerche in base ad un anno prestabilito in una maschera e lo 
uso come criterio) e le varie causali, che possiamo chiamare Caus1, Caus2, Caus3 ecc.
Una delle query ha il seguente codice SQL:
SELECT "" AS Caus1, "" AS Caus2, Count(NOTIFICA.[Caus3]) as Caus3, "" AS Caus4
FROM NOTIFICA
WHERE (((NOTIFICA.[ANNO])=[Forms]![Statistiche_M]![txtANNO]))
GROUP BY NOTIFICA.[Caus3]
HAVING (((NOTIFICA.[Caus3])=True));
Le altre sono identiche salvo per il Count e l'HAVING che vengono impostati su uno delgli 
altri campi.
Il tuo metodo è applicabile anche a questa situazione monotabellare? Io lo sto valutando 
ma mi pare di no..
Alessio


Ciao è applicabilissimo
m anon mi è chara una cosa tu hai una tabella del genere 
select causa1, causa2, causa3 From Notifica
i campi sono booleani e tu voi vedere quanti sì hai per ciascun campo?



Dunque, ho superato il mio problema, ma prima di tutto rispondo alla tua domanda: sì, ho 
una sola tabella con campi booleani, e voglio contare quante volte ho Sì per ognuna di 
tali causali, nell'arco dello stesso anno.
Ho risolto con una query intermedia per ogni causale: prima faccio un raggruppamento con 
la SUM solo sulla causale in questione, quindi eseguo la query che crea i campi "" 
necessari (per l'union) e che prende dalla query intermedia il suddetto campo con la 
funzione GROUP.
In questo modo per le causali che non sono state usate ho 0 come risultato del conteggio.
Yuppi!!
Ti ringrazio Massimiliano, senza leggere nel tuo suggerimento l'uso della SUM, non credo 
di sarei arrivato.
Alessio