D.B. Access per per piccola società sportiva

Egidio Fichera

Nuovo Utente
20 Gen 2014
3
0
0
Buongiorno
Utilizzo Access 2010
Vorrei chiedere aiuto per risolvere un problema in merito alla gestione di un D.B. relativo ad una piccola società sportiva.
Semplificando:
ho creato una tabella "Anagrafica Soci" con i seguenti campi (Codice Socio, nome, cognome, - soliti campi di anagrafica - ) (Codice socio campo con chiave)
ho creato una tabella "Pagamenti" con i campi: (Codice Socio, Quota Sociale, Data Pagamento)
Ho messo in relazione il campo "Codice Socio" delle due tabelle con relazione (uno a molti)
Faccio un esempio:
Creo l'anagrafica di 4 soci: (socio A - socio B - Socio C, Socio D)
La quota sociale del mese di gennaio viene pagata dai soci: ( A e B) ed inserisco il relativo pagamento nella tabella "Pagamenti"
Creo una query per sapere i soci che hanno saldato la quota di Gennaio, per cui filtro la colonna "Data pagamento" con il criterio: (Between [data inizio] AND [Data fine]) filtro la colonna "Quota Sociale" con filtro: >0
La risposta della query é corretta ed ottengo l'elenco dei soci che hanno pagato.
PROBLEMA:
Mi serve conoscere l'elenco dei soci che ancora devono pagare.
Non riesco a risolvere il problema perché i record nella tabella "Pagamenti" vengono generati soltanto al momento del pagamento del socio. Per cui se filtro le colonne come sopra utilizzando ad esempio "Is Null" nella colonna "Data Pagamento", non trovando record che soddisfino questo filtro, non mi da il risultato corretto.
Come posso risolvere?
Spero di essere stato esaustivo nell'esposizione del problema
Ringrazio chiunque voglia darmi un suggerimento.
egidio
 
Ciao,
per estrarre dalla tabella anagrafica i soci non paganti dovresti utilizzare l'OUTER JOIN anzichè l'INNER JOIN come nell'esempio sotto riportato:

SELECT Anagrafica_Soci.Codice_Socio, Anagrafica_Soci.Cognome, iif(isnull(Pagamenti.Quota_Sociale),0,Pagamenti.Quota_Sociale) AS Quota_Sociale
FROM Anagrafica_Soci LEFT JOIN Pagamenti ON Anagrafica_Soci.Codice_Socio = Pagamenti.Codice_Socio;

Nella query sopra esposta vengono estratti tutti i soci e per i non paganti, il valore del campo "Quota_Sociale" è 0.
Nel caso vuoi estrarre solo i non paganti, ovviamente devi aggiungere il filtro "WHERE Pagamenti.Codice_Socio IS NULL" come segue:

SELECT Anagrafica_Soci.Codice_Socio, Anagrafica_Soci.Cognome, iif(isnull(Pagamenti.Quota_Sociale),0,Pagamenti.Quota_Sociale)
FROM Anagrafica_Soci LEFT JOIN Pagamenti ON Anagrafica_Soci.Codice_Socio = Pagamenti.Codice_Socio
WHERE Pagamenti.Codice_Socio IS NULL

Ciao
Mik



A quick solution is a shortcut to troubleshooting
HolidaySoft.it - Gestionali, Database, SitiWeb
GarganoSapori.it - Olio ExtraVergine del Gargano
OsteriaORistorante.it - Crea la Vetrina per il tuo Ristorante!
 
Grazie

Ti ringrazio per il tuo prezioso suggerimento.
Provato su una simulazione sembra funzionare.
A buon rendere
 

Discussioni simili