Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    15

    Query che confronta le date di una tabella con l'anno in corso

    Buongiorno a tutti,
    Colgo intanto l'occasione per presentarmi: mi chiamo Matteo, e non sono un esperto di programmazione, ho ricevuto pochissime nozioni ed ho sempre cercato di imparare da solo, provando e provando fino a raggiungere il risultato che volevo ottenere.

    Purtroppo non riesco a procedere con il programma che sto facendo..

    Lo sto realizzando in Access perchè l'utilizzatore finale ha meno nozioni di me in informatica, e per questo ho deciso di creare un database con varie maschere e report per renderlo il più user-friendly possibile.

    Ma adesso vi spiego il problema:
    Devo realizzare una query per trovare i morosi nei pagamenti della quota associativa dell'anno in corso. Ovviamente risulterà moroso chiunque non ha pagato dal primo gennaio dell'anno in corso. Una volta inserito il pagamento nella tabella, non dovrà risultare più moroso.

    Le tabelle che vengono utilizzate in questa query sono due: aziende (che contiene tutti i dati dell'aziende che vanno mostrati nel risultato, come id, nome azienda, numero telefono ecc.) e pagamenti, che contiene una lista di ogni pagamento fatto da quell'azienda nel corso degli anni.

    Come posso fare?

    Ci tengo a ringraziarvi in anticipo e sono pronto a darvi ogni dettaglio in più che vi può servire.

  2. #2
    dati gli elementi, tu potrai conoscere solo i NON morosi, cioè quelli che han pagato (quindi con Year(datapagamento)=year(now()) )

    a questo punto devi prendere TUTTE le aziende TRANNE (NOT IN) quelle che han pagato. considera solo le aziende attive

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    15
    Scusa la mia ignoranza ma quindi una volta scritta la query così

    SELECT Aziende.[ID], Aziende.[NomeAzienda], Aziende.[Cognome amm], Aziende.[Nome amm], Aziende.[Attività], Aziende.[Numero Tel], Aziende.[Email]
    FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda
    WHERE Year(Pagamenti.[datapagam])=year(now());

    come faccio a prendere le aziende che non hanno pagato?

  4. #4
    la sintassi generica è

    SELECT colonne FROM tabella WHERE colonna NOT IN (SELECT colonna FROM altratabella)

    quindi per prima cosa ricava gli id delle aziende dalla tabella dei pagamenti (solo l'id dell'azienda, e solo tabella pagamenti)

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    15
    Ho provato in tutti i modi ma non mi funziona, non riesco a capire proprio come fare.

    Ho scritto una cosa così:

    SELECT Aziende.[ID], Aziende.[NomeAzienda], Aziende.[Cognome amm], Aziende.[Nome amm], Aziende.[Attività], Aziende.[Numero Tel], Aziende.[Email]
    FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda
    WHERE Aziende.[ID] = NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()));

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    15
    Perfetto, ho risolto! (Dovevo solamente togliere l'uguale)

    Ti ringrazio tantissimo! A presto!

  7. #7
    nelle due select (interna ed esterna) puoi evitare la join, non ti servono, visto quello che estrai

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    15
    Nuovo problema: devo far comparire inoltre per ogni record l'ultimo pagamento effettuato da quell'azienda, che è contenuto nella tabella pagamenti.

    Ho provato a fare due queries, ma entrambe non funzionano.

    Infatti, una mi fa vedere i vari record con la data dell'ultimo pagamento uguale per tutti

    SELECT Aziende.[ID], Aziende.[NomeAzienda], Aziende.[Cognome amm], Aziende.[Nome amm], Aziende.[Attività], Aziende.[Numero Tel], Aziende.[Email], (SELECT Last(pagamenti.[Datapagam]) FROM Pagamenti INNER JOIN aziende ON pagamenti.Azienda = Aziende.ID WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()))) AS UltimoPag
    FROM Aziende
    WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()))
    AND aziende.[disdetto/radiato] = false;

    Mentre la seconda mi fa vedere solo un record che ha la data dell'ultimo pagamento più recente

    SELECT Aziende.[ID], Aziende.[NomeAzienda], Aziende.[Cognome amm], Aziende.[Nome amm], Aziende.[Attività], Aziende.[Numero Tel], Aziende.[Email], Pagamenti.DataPagam
    FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda
    WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now()))
    AND Pagamenti.Datapagam = (SELECT MAX(pagamenti.[Datapagam]) FROM Pagamenti INNER JOIN aziende ON pagamenti.Azienda = Aziende.ID WHERE Aziende.[ID] NOT IN (SELECT Aziende.[ID] FROM Aziende INNER JOIN pagamenti ON Aziende.ID = pagamenti.Azienda WHERE Year(Pagamenti.[datapagam])=year(now())))
    AND aziende.[disdetto/radiato] = false;

    Come posso fare..?

  9. #9
    nuovo problema, nuovo 3d, per piacere. come da regolamento.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    15
    Scusami, pensavo andasse bene anche qua.

    Ho provato prima a cercare se trovavo qualcosa, ma niente.

    Posto subito!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.