Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

di il
8 risposte

Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

Buongiorno a tutti,
mi trovo ad affrontare un problema con una query, sulla carta piuttosto semplice. Ho due query di origine, che mi calcolano rispettivamente le vendite YtD dell'anno corrente e di quello precedente (in modo da avere un confronto cliente per cliente sullo stesso period temporale).

Le due query, dopo aver fatto un check manual, funzionano bene... il problema sorge quando cerco di joinare le due risultanti in una terza query, che dovrebbe contenere:
Cliente - Famiglia prodotto - Invocing country - NetSale YtD 2015 - NetSale YtD 2016

Tutto bello, e tutto interessante, non fosse per il fatto che I record sono solo quelli nei quali viene trovata corrispondenza nelle due query di origine! Se ad esempio il cliente PincoPallo ha acquistato nel 2015, ma non nel 2016, questo non viene visualizzato!

Esiste un modo (o meglio, quale è il modo) per aggirare questo problemino?

Grazie a tutti

8 Risposte

  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    tamaeril ha scritto:


    ...
    Tutto bello, e tutto interessante, non fosse per il fatto che I record sono solo quelli nei quali viene trovata corrispondenza nelle due query di origine! Se ad esempio il cliente PincoPallo ha acquistato nel 2015, ma non nel 2016, questo non viene visualizzato!
    ...
    Se sai che i clienti sono SEMPRE nel 2015 e a volte mancanti nel 2016, o viceversa, ma mai alcuni nel 2015 ma non nel 2016 e alcuni nel 2016 ma non nel 2015 (che giro di parole) è sufficiente modificare il join da INNER a LEFT (o RIGHT).
    Se invece, come dicevo, possono esserci clienti con acquisti nel 2015 ma non nel 2016 ed altri clienti con acquisti nel 2016 ma non nel 2015 (situazione abbastanza comune) devi "emulare" una FULL JOIN, perché Access non la prevede.
    Vedi qui alcuni esempi
    Implementing the Equivalent of a FULL OUTER JOIN in Microsoft Access
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    tamaeril ha scritto:


    Esiste un modo (o meglio, quale è il modo) per aggirare questo problemino?
    Se non mostri le query, è difficile aiutarti, non credi?
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    Dunque, seguendo il consiglio di Phil e giocando sulle join il tutto funziona molto meglio, ma, manco a dirlo, da qualche parte ho toppato!
    La query che aggrega le due precedent è ora la seguente:
    
    SELECT ANALYSISytd2015.*, ANALYSISytd2016.*
    FROM ANALYSISytd2015 INNER JOIN ANALYSISytd2016 
    ON (ANALYSISytd2015.Customer = ANALYSISytd2016.Customer and ANALYSISytd2015.Family = ANALYSISytd2016.Family)
    UNION
    SELECT ANALYSISytd2015.*, ANALYSISytd2016.*
    FROM ANALYSISytd2016 INNER JOIN ANALYSISytd2015
    ON (ANALYSISytd2016.Customer = ANALYSISytd2015.Customer  and ANALYSISytd2016.Family = ANALYSISytd2015.Family)
    UNION
    SELECT ANALYSISytd2015.*, ANALYSISytd2016.*
    FROM ANALYSISytd2015 LEFT JOIN ANALYSISytd2016 
    ON (ANALYSISytd2015.Customer = ANALYSISytd2016.Customer and ANALYSISytd2015.Family = ANALYSISytd2016.Family)
    WHERE( ANALYSISytd2016.Customer Is Null)
    UNION 
    SELECT  ANALYSISytd2015.*, ANALYSISytd2016.*
    FROM ANALYSISytd2016 RIGHT JOIN ANALYSISytd2015 
    ON  (ANALYSISytd2016.Customer = ANALYSISytd2015.Customer  and ANALYSISytd2016.Family = ANALYSISytd2015.Family)
    WHERE( ANALYSISytd2015.Customer Is Null);
    
    Ora, escludendo la inner ripetuta che non credo abbia senso....come risultante ottengo:
    1 ) Tutti i clienti che hanno uno storico riferito ai due anni.
    2 ) Tutti i clienti che hanno acquistato nell'anno 2015, ma non nel 2016.
    3 ) NON VENGONO VISUALIZZATI: Tutti i clienti che hanno acquistato nel 2016, ma non nel 2015.

    Qualcuno sa indirizzarmi?
    Chiedo venia, il nostro IT manager che normalmente si sorbisce queste inutile domande con pazienza infinita è in ferie....
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    FERMI TUTTI! L'errore sta nel fatto che sono un deficiente, e all'alternare RIGHT e LEFT ho pensato bene di invertire anche l'ordine delle tabelle, duplicando a gratis la stessa JOIN.

    Soluzione trovata (parrebbe), chiedo scusa per il disturbo e ringrazio nuovamente Phil che, non per la prima volta, mi indirizza verso la soluzione più adatta. Grazie a tutti!
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    tamaeril ha scritto:


    FERMI TUTTI! L'errore sta nel fatto che sono un deficiente, e all'alternare RIGHT e LEFT ho pensato bene di invertire anche l'ordine delle tabelle, duplicando a gratis la stessa JOIN.
    Se la cosa ti può consolare c'ho impiegato 10 minuti per accorgermi di quella cosa e... per fortuna non avevo ancora pubblicato i suggerimenti più fantasiosi del mondo.

    tamaeril ha scritto:


    Soluzione trovata (parrebbe), chiedo scusa per il disturbo e ringrazio nuovamente Phil che, non per la prima volta, mi indirizza verso la soluzione più adatta. Grazie a tutti!
    Ci credi che fino ad settimana fa non ricordavo cosa era un FULL JOIN (ammesso che l'abbia mai saputo) e il fatto che Access non lo supportava? Grazie a questa "rinfrescata" di nozioni è bastata una ricerca sul web, altrimenti sarei stato nella tua stessa situazione.
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    Mi scuso ma mi trovo a chiedere aiuto due volte in due giorni, per lo stesso Db e per lo stesso problema! Ho identificato dove devo intervenire, come farlo è un0altra storia...

    Piccolo recap: sto preparando un report autoaggiornante su Excel che si appoggia ad un database, che deve contenenere il totale venduto YtD dell'anno corrente e l'YtD del anno precedente, con il dettaglio per cliente e famiglia di prodotto.
    Ho creato due query distinte, una che calcola I valori per l'anno corrente ed uno per l'anno precedente, unendole in una terza query che rimpallo sul foglio di calcolo.

    Nel momento in cui strutturo la pivot, se inserisco ambedue I campi clienti e ambedue I campi famiglia (riferiti alle due query di origine), il tutto diviene illeggibile. Al contempo se inserisco solo uno dei due possibili campi per ciascuna dimensione, determinati valori non vengono ovviamente visualizzati (ossia, tutti I dati relativi all'anno 2016 per cui non c'è corrispondenza cliente e/o famiglia).

    Dovrei trovare un modo per far si che nelle due query che calcolano I valori distintamente per I due anni, venissero indicati tutti I clienti e tutte le famiglie presenti nelle tabelle, anche dove I valori = NULL (quindi un prodotto cartesiano dei due campi).
    La mia idea era trasformare la INNER JOIN per quelle tabelle in LEFT JOIN, ma ovviamente la cosa non funziona!
    Ci sono altre possibili vie da seguire?
    Oppure qualcuno sa indirizzarmi su come annidiare le JOIN?

    Il mio codice SQL riguardante le JOIN è il seguente
    
    FROM Salesmen INNER JOIN ((Family INNER JOIN ProductFamily ON Family.Family_ID = ProductFamily.Family_ID) INNER JOIN (PRODUCT INNER JOIN (CUSTOMER INNER JOIN DBmain_ORDERS ON CUSTOMER.CustomerNo = DBmain_ORDERS.CustomerNo) ON PRODUCT.Item = DBmain_ORDERS.Item) ON ProductFamily.PF_ID = PRODUCT.PF_ID) ON Salesmen.Pure_ID = CUSTOMER.Pure_ID
    
    Per darvi uno shot visual delle tabelle coinvolte:
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    tamaeril ha scritto:


    Qualcuno sa indirizzarmi?
    Anche se la query non mi sembra proprio corretta, tieni presente che UNION elimina i duplicati.

    Prova con UNION ALL, si sa mai...

    Poi ne ridiscutiamo.
  • Re: Query da queries: mi indica solo i nominativi presenti in ambe le query di origine

    Funziona!!!
    Dopo le prime modifiche, con un UNION ALL mi univa i TotNet 2015 e 2016...così ho aggiunto in ciascuna delle query sorgenti una nuova colonna vuota. Pur funzionando la query in se, nella pivot Excel i valori non venivano raffigurati. Inserendo però in queste colonne "fittizie" una serie di 0, ha preso tutti i valori come numerici e il tutto funziona ottimamente.

    Ora manca solo una modifica ai criteri delle query per raffinare l'analisi...probabilmente non avendo idea di come applicare quanto mi son prefissato non riuscirò, ma qualche idea già la ho. E al limite lunedì dovrebbe rientrare il nostro IT manager xD

    In caso contrario, aspettatevi di rivedermi presto su questi lidi

    E nuovamente: grazie a tutti!
Devi accedere o registrarti per scrivere nel forum
8 risposte