Query a campi incrociati con campo nullo

di il
4 risposte

Query a campi incrociati con campo nullo

Buongiorno ragazzi, BUON ANNO a tutti!
Ho una query a campi incrociati (QR_PORTAFOGLIO) che pesca dati da una tabella (PORTAFOGLIO) e da due query (QS_CONSEGNATO e QS_CONSEGNATO_mesi). Sostanzialmente questa query mi aggrega alcuni totali per creare un report contenente i dati di portafoglio ordini clienti e del consegnato a clienti su base mensile.
In questo momento (ma sarà così ad ogni inizio mese) ho una situazione in cui il portafoglio ordini clienti ha dei valori ma a gennaio non è stato ancora consegnato nulla, pertanto la query QS_CONSEGNATO è vuota. Il problema è che fintanto che non effettuerò consegne la QR_PORTAFOGLIO non mi restituirà nulla.
Potrei risolvere la cosa forzando nella query QS_CONSEGNATO un record con valore 0 ma mi pare una brutta soluzione. Ho provato a inserire nell'espressione
Consegnato: IIf(IsEmpty([QS_CONSEGNATO].[Total]);0;[QS_CONSEGNATO].[Total])
ma non funziona. Ho provato anche con le funzioni IsNull e Nz ma è chiaro che c'è un errore concettuale.
Ciò che vi chiedo è se c'è un modo in cui la query creasse automaticamente un record con valore 0 nel caso in cui non ci siano record in uno dei campi utilizzati.
Grazie mille per qualsiasi tipo di aiuto potrete darmi.
Claudio

4 Risposte

  • Re: Query a campi incrociati con campo nullo

    Non è chiaro lo scenario complessivo, comunque come primo aspetto prendere in considerazione è valutare il tipo di join nelle query di partenza (QS_CONSEGNATO e QS_CONSEGNATO_mesi) in quanto se vi fosse una inner-join magari non vengono presentati i valori nulli di una tabella (di conseguenza sarebbero mancanti anche i relativi totali che confluiscono nella query a campi incrociati
    ed il tal caso andrebbe valutato se deve essere impostata una left o right join).
    Altro elemento da escludere è se il campo Total non scaturisce dalla query ma piuttosto da una visualizzazione dei totali di colonna in un foglio dati:
    https://support.microsoft.com/it-it/office/visualizzare-totali-di-colonna-in-un-foglio-dati-con-la-riga-totali-8f1f89c4-7f86-4113-a836-291ac3ea446e
    Infine, per la corretta formula del valore nullo che venga posto a zero, verifica, adattandola, la seguente sintassi:
    
    Consegnato: IIf(IsNull([Totale]);0;[Totale])
    
  • Re: Query a campi incrociati con campo nullo

    Sei stato di grande aiuto!
    Anche se la mia esposizione non era chiara hai centrato il problema, è stato sufficiente cambiare il tipo di join e utilizzare la sintassi che mi hai passato per impostare il valore del consegnato a zero. E pensare quanto ci ho girato attorno...
    Grazie ancora!
  • Re: Query a campi incrociati con campo nullo

    joke99 ha scritto:


    utilizzare la sintassi che mi hai passato per impostare il valore del consegnato a zero.
    Quando si è all'interno di una query, invece di IsNull([Qualcosa]) è meglio usare [Qualcosa] Is Null. La spiegazione la trovi qui: e che per comodità riporto qui, senza formattazione
    Use SQL rather than VBA
    JET/ACE (the query engine in Access) uses Structured Query Language (SQL), as many databases do. JET can also call Visual Basic for Applications code (VBA.) This radically extends the power of JET, but it makes no sense to call VBA if SQL can do the job.
    Is Null, not IsNull()
    Is Null is native SQL.
    IsNull() is a VBA function call.
    There is never a valid reason to call IsNull() in a query, when SQL can evaluate it natively.
  • Re: Query a campi incrociati con campo nullo

    invece di IsNull([Qualcosa]) è meglio usare [Qualcosa] Is Null
    provato e funziona, ne terrò conto!
    grazie della dritta
Devi accedere o registrarti per scrivere nel forum
4 risposte