Invertire i risultati di una query [risolto]

di il
9 risposte

Invertire i risultati di una query [risolto]

Buongiorno a tutti.
Non so come risolvere questo problema.
Il database contiene una tabella soci con un campo che contiene il nominativo del socio (Nome) e un campo contatore (contatti id).
A questa tabella è collegata un'altra tabella (Tessera) che contiene un campo che fa riferimento alla tabella soci (contatti id) e un campo che contiene l'anno del pagamento tessera (Anno)

Per cui avremo questa situazione:

Rossi -----> ha pagato nel 2014
-----> ha pagato nel 2015

Bianchi -----> ha pagato nel 2014

Se voglio cercare i soci che non hanno ancora pagato nel 2015 e nella query imposto di cercare l'anno <>2015 mi viene fuori anche Rossi che ha un pagamento nel 2014, che appunto è <> da 2015.
Come si potrebbe fare? Ho pensato di far cercare i soci che hanno pagato nel 2015 e poi invertire la selezione, in modo che saltino fuori solo quelli non inclusi in questo elenco. Ma non so come si fa.

Grazie in anticipo.

9 Risposte

  • Re: Invertire i risultati di una query [risolto]

    Potresti dare una descrizione leggermente più chiara? Ossia:
    NomeTabella1: tutti i suoi campi, indicando il campo chiave primaria
    NomeTabella2: idem
    La relazione.
  • Re: Invertire i risultati di una query [risolto]

    Mimmo68 ha scritto:


    ...
    Come si potrebbe fare? Ho pensato di far cercare i soci che hanno pagato nel 2015 e poi invertire la selezione, in modo che saltino fuori solo quelli non inclusi in questo elenco. Ma non so come si fa...
    Puoi raggiungere questo risultato con sistemi diversi: qui li trovi tutti http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server/. Non è riferito ad Access e si parla anche di prestazioni ma è facile da adattare. Puoi anche usare la Creazione guidata query ricerca dati non corrispondenti (ma è meglio se capisci fin da subito la logica che ci sta sotto leggendo direttamente in sql)
  • Re: Invertire i risultati di una query [risolto]

    Ho riletto meglio...forse ho capito. Io ragionerei per piccoli passi.
    1. Query1 in cui calcolo il Max sul campo Anno per ogni Socio
    2. Query2 che guarda i valori di Query1 secondo il criterio che hai detto <>2015 (anche solo <2015)
  • Re: Invertire i risultati di una query [risolto]

    Intanto grazi a tutti.
    edit. Forse con minore di 2015....Provo....
    @Osvaldo.
    Sì, avvevo già provato con la prima query che mi estrae l'anno max.
    Ma supponiamo così
    Rossi -----> ha pagato nel 2014
    -----> ha pagato nel 2015
    -----> ha pagato nel 2016

    Bianchi -----> ha pagato nel 2014

    Io cerco sempre i tesserati del 2015
    La query evidenzia come max Rossi (2016) e Bianchi (2014), entrambi diversi da 2015, ma Rossi ha già pagato il 2015.
  • Re: Invertire i risultati di una query [risolto]

    No Niente.
    La prima query mi evidenzia l'anno max e riporta questo:
    Rossi (2016)
    Bianchi (2014)
    e da questi dati so per certo che Bianchi non ha pagato ma Rossi non lo so.
  • Re: Invertire i risultati di una query [risolto]

    1. Query1 con criterio >=2015. Questa query (anche se potrebbe presentare record duplicati) ti restituisce i Soci IN REGOLA.
    2. Query2 di ricerca dati non corripondenti fra Soci e Query1, sfruttando il campo chiave primaria di Soci. Questa query ti restituisce i Soci NON IN REGOLA.
  • Re: Invertire i risultati di una query [risolto]

    Grazie Osvaldo.
    In fondo era semplice...bastava un po' di testa...
  • Re: Invertire i risultati di una query [risolto]

    Basta solo 1 QUERY con tabella derivata
    
    SELECT T1.*
    FROM T1 LEFT JOIN 
        (SELECT T1.ID, T1.FK, Year([Data]) AS Anno
         FROM T1
         WHERE Year([Data])=2015) AS Q1 
    ON T1.[ID] = Q1.[ID]
    WHERE Q1.ID Is Null;
    Dove:
    ID= Pk della Tabella
    FK= Foreign Key
  • Re: Invertire i risultati di una query [risolto]

    Ciao Alex.
    Ci ho messo un po a capire, ma poi ci sono riuscito. Sì funziona anche così. Grazie.
Devi accedere o registrarti per scrivere nel forum
9 risposte