Query dati non esistenti

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Query dati non esistenti

    Posta tutto l'SQL a cui sei arrivato, compresa la query di appoggio
  • Re: Query dati non esistenti

    MancatiPagamenti_pre Query
    SELECT DISTINCT p.id_persona, p.COGNOME, p.NOME, a.Anno
    FROM persone AS p, pagamenti AS a;
    
    Persone non paganti Query
    SELECT Pagamenti.ID, MancatiPagamenti_pre.COGNOME, MancatiPagamenti_pre.NOME, MancatiPagamenti_pre.Anno, *
    FROM Pagamenti LEFT JOIN MancatiPagamenti_pre ON (Pagamenti.Anno = MancatiPagamenti_pre.Anno) AND (Pagamenti.ID_Pagamenti = MancatiPagamenti_pre.id_persona)
    WHERE (((Pagamenti.ID) Is Null));
    
    immagino che l'errore e qui
    (((Pagamenti.ID) Is Null
    Tabella persone:
    ID_Persona(PK)
    Cognome
    Nome

    Tabella Pagamenti:
    ID(PK)
    Quota
    Anno
    ID_Pagamenti (FK As = ID_Persona)
  • Re: Query dati non esistenti

    
    SELECT MancatiPagamenti_pre.*
    FROM MancatiPagamenti_pre LEFT JOIN PAGAMENTI ON 
         (MancatiPagamenti_pre.Anno = PAGAMENTI.anno) 
         AND (MancatiPagamenti_pre.id_persona = PAGAMENTI.idPagamenti)
    WHERE PAGAMENTI.id Is Null;
    
    poi io preferisco sempre avere pulizia per cui, per mio modo di vedere le cose, nella prequery metterei solo i 2 campi "chiave" (idPersona e anno) e alla fine metterei in join la PERSONE decodificando l'idPersona ... ma funziona anche così
  • Re: Query dati non esistenti

    Intanto grazie per l'auto a me e sicuramente a chi avrà lo stesso problema.
    la query creata da te non porta nessun risultato.
    Ma sono sicuro che la strada e quella giusta.
    Una domanda :perchè PAGAMENTI.id Is Null quando non sarà mai NULL?
  • Re: Query dati non esistenti

    Risolto un errore di battitura _
  • Re: Query dati non esistenti

    Ho provato con questi dati
    PERSONE:
    id_persona; cognome; nome
    1; rossi; mario
    2; verdi; luigi
    3; neri; francesco

    PAGAMENTI:
    id; quota; anno; idPagamenti
    1; 10; 2020; 1
    2; 10; 2021; 1
    3; 10; 2022; 1
    4; 10; 2019; 2
    5; 10; 2020; 2
    6; 10; 2021; 2
    7; 10; 2020; 3
    8; 10; 2021; 3

    e con questa prequery
    SELECT DISTINCT p.id_persona, a.Anno, p.cognome, p.nome
    FROM PERSONE AS p, PAGAMENTI AS a;
    
    e questa finale
    SELECT MancatiPagamenti_pre.*
    FROM MancatiPagamenti_pre LEFT JOIN PAGAMENTI ON ([MancatiPagamenti_pre].Anno=PAGAMENTI.anno) AND ([MancatiPagamenti_pre].id_persona=PAGAMENTI.idPagamenti)
    WHERE ((([PAGAMENTI].id) Is Null));
    
    ottengo quanto desiderato
    id_persona; Anno; cognome; nome
    1; 2019; rossi; mario
    2; 2022; verdi; luigi
    3; 2019; neri; francesco
    3; 2022; neri; francesco

    poi ci sarebbe da obiettare che se filtri su uno specifico anno allora ok ... ma a quel punto si potrebbe semplificare il tutto ma se devi guardare per tutti gli anni pregressi dovresti anche avere una data di "iscrizione" della persona per escludere gli anni precedenti in cui giustamente non ha pagato in quanto non iscritto
  • Re: Query dati non esistenti

    Ho provato con questi dati
    PERSONE:
    id_persona; cognome; nome
    1; rossi; mario
    2; verdi; luigi
    3; neri; francesco

    PAGAMENTI:
    id; quota; anno; idPagamenti
    1; 10; 2020; 1
    2; 10; 2021; 1
    3; 10; 2022; 1
    4; 10; 2019; 2
    5; 10; 2020; 2
    6; 10; 2021; 2
    7; 10; 2020; 3
    8; 10; 2021; 3

    e con questa prequery
    SELECT DISTINCT p.id_persona, a.Anno, p.cognome, p.nome
    FROM PERSONE AS p, PAGAMENTI AS a;
    
    e questa finale
    SELECT MancatiPagamenti_pre.*
    FROM MancatiPagamenti_pre LEFT JOIN PAGAMENTI ON ([MancatiPagamenti_pre].Anno=PAGAMENTI.anno) AND ([MancatiPagamenti_pre].id_persona=PAGAMENTI.idPagamenti)
    WHERE ((([PAGAMENTI].id) Is Null));
    
    ottengo quanto desiderato
    id_persona; Anno; cognome; nome
    1; 2019; rossi; mario
    2; 2022; verdi; luigi
    3; 2019; neri; francesco
    3; 2022; neri; francesco

    poi ci sarebbe da obiettare che se filtri su uno specifico anno allora ok ... ma a quel punto si potrebbe semplificare il tutto ma se devi guardare per tutti gli anni pregressi dovresti anche avere una data di "iscrizione" della persona per escludere gli anni precedenti in cui giustamente non ha pagato in quanto non iscritto
    segue a ruota una re-iscrizione (es uno iscritto nel 2019, poi si ferma e si re-iscrive nel 2021)... devi a quel punto prevedere un'altra struttura proprio, in cui hai persone, iscrizioni, pagamenti, anni/quote
  • Re: Query dati non esistenti

    Ho riletto il primo tuo post e se vuoi ottenere non i soli NON paganti ma averfe tutto allora togli la where e metti un iif in cui in base al fatto che PAGAMENTI.id sia nullo o meno metti PAGATO / NON PAGATO
  • Re: Query dati non esistenti

    Mi va benissimo come mi hai spiegato, creerò una maschera con una casella combinata con i vari anni (dal 2010) che esporterà solo i NON paganti riferiti all'anno della casella combinata.
  • Re: Query dati non esistenti

    poi ci sarebbe da obiettare che se filtri su uno specifico anno allora ok ... ma a quel punto si potrebbe semplificare il tutto
    sarebbe un ulteriore idea la tua.
    esportare solo i non paganti selezionati per anno.
    per quanto la data di iscrizione non esiste in quanto i pagamenti iniziano dal 2010 per tutti
    ora come dovrei modificare la tua query?
  • Re: Query dati non esistenti

    Spero che tra di voi vi state capendo ugualmente. Per meopatacca: dissento sulle denominazioni campi. Le denominazioni più ortodosse/standard/comprensibili per tutti gli utenti dovrebbero essere queste

    Persone
    IDPersona (PK)
    Cognome
    Nome

    Pagamenti
    IDPagamento (PK)
    Quota
    Anno
    IDPersona (FK)

    Relazione Persone.IDPersona uno-a-molti Pagamenti.IDPersona

    Regole base:
    1. I nomi delle tabelle sempre al PLURALE
    2. I nomi campi sempre al SINGOLARE
    3. Il campo PK deve richiamare (generalmente) il nome tabella (IDPersona, IDPagamento)
    4. Il campo PK relazionato al suo omonimo FK. Alcuni pignoli potrebbero chiamarli rispettivamente PkPersona, FkPersona.
  • Re: Query dati non esistenti

    Tutti iniziano dal 2010?
    nessun nuovo iscritto in anni successivi?
    non conosco il contesto ma mi sembra strano ...
    prova a spiegare di cosa si tratta

    @Osvaldo: si, struttura nominata in modo pessimo, già discusso nei primi post
  • Re: Query dati non esistenti

    Infatti hai ragione, ci sono molte casistiche che io non avevo preso in considerazione.
    Purtroppo io ho solo preso un file xls ho creato un semplice db dove viene mostrato se il socio ha pagato la quota annuale.
    il file inizia dal 2010, ma come dici tu ci sono soci che si sono uniti anche nel 2017, e quì sorge il mio problema perchè il file ha anche la data di iscrizione e per di più anche di testo.

    pertanto ho sistemato la tabella rinominandola in contatti e sistemando gli id
    IDcontatto
    COGNOME
    NOME
    DATA ISCRIZIONE (TESTO GG/MM/AAAA)
    
    e così già ho modificato la prequery
    SELECT DISTINCT c.idcontatto, p.Anno, c.cognome, c.nome, c.data_iscrizione, c.categoria
    FROM CONTATTI AS c, PAGAMENTI AS p;
    
    Ho riscritto la tabella utenti rinominandola in CONTATTI e sistemando gli ID

    Sto andando avanti con le prove e la prequery ora si presenta così
    SELECT DISTINCT p.IDcontatti, p.COGNOME, p.NOME, p.CATEGORIA, p.DATA_ISCRIZIONE, a.Anno
    FROM contatti AS p, pagamenti AS a
    WHERE (((Right([p].[data_iscrizione],4))<=[a].[anno]));
    
  • Re: Query dati non esistenti

    DATA ISCRIZIONE (TESTO GG/MM/AAAA)
    non ho capito... l'hai caricato come testo? non era + comodo caricarlo come data???

    Altre domande, giusto per mettere un pò di carne al fuoco ...
    la quota è fissa ogni anno? nel caso a maggior ragione ma a prescindere io la farei comunque, sarebbe utile/comodo avere (come già ti avevo detto nei primi post) una tabella QuoteAnno con ANNO (PK), QUOTA
    questo ti eviterebbe anche di dover cercare gli anni nei pagamenti e risolveresti nel caso di nessun pagamento per anno.
    Insomma... secondo me l'hai semplificato un pò troppo, ti consiglio di rivedere la tua struttura. Non partire a razzo facendo cose che poi ti creano problemi, prima si analizza, poi si struttura di conseguenza, poi si parte con popolamento dati e creazione form/report
  • Re: Query dati non esistenti

    Certo che ho 2 tabelle normalizzate
    CONTATTI
    IDCONTATTO(PK)
    COGNOME
    NOME
    DATA_ISCRIZIONE (TESTO )

    PAGAMENTI
    ID (PK)
    QUOTA
    ANNO
    IDPAGAMENTO(FK)
    la quota è fissa ogni anno?
    SI 60€ ed ogni anno si rinnova
    prima si analizza, poi si struttura di conseguenza, poi si parte con popolamento dati e creazione form/report
    avevano un file excel compilato dal 2010 ad oggi con 1170 record
Devi accedere o registrarti per scrivere nel forum
30 risposte