Query: Impostare il risultato di un conteggio numerico

di il
4 risposte

Query: Impostare il risultato di un conteggio numerico

Signori buongiorno.
La prendo alla larga per far comprendere lo scenario:

Vorrei sottoporvi questo problema, che nello specifico vede coinvolta una sola tabella (comunque legata ad altre che ritengo ininfluenti in questo contesto):
[StoricoCongedoParentale] che contiene i dati riferiti ai periodi di "congedo maternità/paternità" che ciascun genitore fruisce in virtù di ciascun figlio: ([Id], dal, al, numero di giorni, Idfiglio, Matricola genitore, altre assenze, ...)
Questa tabella viene alimentata da un maschera/sottomaschera, nella quale vengono inseriti i dati di interesse.

Ho predisposto una query (che raggruppa alcuni dati provenienti da una serie di altre query), la quale "alimenta" un report che viene stampato ogni qualvolta un genitore chiede dei giorni;
In questo report, tra l'altro, viene riportato anche il totale del numero di giorni già fruiti NELL'ANNO CORRENTE dal quel genitore, per quel figlio specifico (potrebbe avere più figli).

Vorrei aggiornare il report descritto, inserendo un nuovo dato:
Il genitore, NELL'ANNO CORRENTE, ha già fruito di x giorni per quel figlio;
Di quanti giorni ha fruito quel genitore complessivamente, NELL'ANNO CORRENTE, SOLO per eventuali ALTRI figli?

Volevo predisporre questa ulteriore query, la quale praticamente considera tutti gli eventuali figli, di quel genitore, diversi da quello per il quale viene fatta la richiesta, considerando la decorrenza dell'assenza nell'anno in corso (i valori [MATR} ed [IdFiglio] vengono presi dalle maschere aperte):
SELECT Sum(StoricoCongParentale.Giorni) AS TotAnnoAltriFigli
FROM StoricoCongParentale
GROUP BY Year([StoricoCongParentale]![dal]), StoricoCongParentale.IdFigli, StoricoCongParentale.MATR
HAVING (((Year([StoricoCongParentale]![dal]))=Year(Date())) AND ((StoricoCongParentale.IdFigli)<>[Maschere]![GestioneFigli]![IdFiglio]) AND ((StoricoCongParentale.MATR)=[Maschere]![Personale]![MATR]));
funziona, a patto che ci siano altri figli per i quali risulta registrata almeno una assenza del genitore nell'anno corrente.
Diversamente restituisce una tabella vuota, null,... sinceramente non lo so che genere di valore possa essere considerato

Nel tentativo di ottenere un valore pari a "zero" in questa circostanza, ho utilizzato il comando IIF:
IIF ([Giorni] is null; 0;[Giorni])
tentando anche la condizione [Giorni]=""

Googlando ho visto anche la funzione "Nz" (che mi sembra molto simile alla funzione IIF), ma la sostanza non è cambiata.
La tabella risultante continua a risultare vuota.

Come posso ottenere il valore numerico "zero" qualora non siano presenti dati (altri figli per i quali non sono stati fatti giorni di assenza)?

[EDIT]
Preciso che il campo [Giorni] NON è un campo calcolato; è un valore immesso manualmente.

4 Risposte

  • Re: Query: Impostare il risultato di un conteggio numerico

    Robpagna ha scritto:


    [StoricoCongedoParentale] che contiene i dati riferiti ai periodi di "congedo maternità/paternità" che ciascun genitore fruisce in virtù di ciascun figlio: ([Id], dal, al, numero di giorni, Idfiglio, Matricola genitore, altre assenze, ...)
    1. Siamo sicuri che occorre una tabella così "specifica"? Non hai pensato a una tabella più generica che tratta (non so esprimermi meglio) i Movimenti di Figli e Genitori e da lì poi deduci una query che ti estrapoli solo i CongediParentali?
    2. Il campo [numero di giorni] è sicuramente errato in tabella, dal momento che hai già i campi Dal, Al. Quel conteggio giorni lo devi ottenere da una query con apposita funzione di calcolo.

    Per tutto il resto non riesco a seguire il discorso in mancanza dello scenario completo tabelle.
  • Re: Query: Impostare il risultato di un conteggio numerico

    Grazie per l'attenzione.
    Le tabelle "madri" sono una che contiene i dati del personale, ed un'altra che contiene dei dati personali dei figli i cui dati vengono prelevati mediante l'utilizzo di caselle combinate.
    La tabella è strutturata in quel modo perché per ogni assenza devo "storicizzare" anche una serie di altri dati riferiti ad ogni singola assenza, ciascuno dei quali viene inserito manualmente (a titolo di esempio, il protocollo delle lettere che vengono generate di volta in volta). Non riesco ad immaginare una gestione di tali dati diversa.
    Un campo calcolato è presente, ma il conteggio lo vorrei fare sul campo scritto a mano (che non necessariamente corrisponde sempre al calcolo Al-Dal+1).
    Al di la di questo, ho pensato di non dilungarmi sullo scenario generale, in considerazione del fatto che il risultato che vorrei ottenere proviene dai dati contenuti nella singola tabella, al di la del contesto generale.
  • Re: Query: Impostare il risultato di un conteggio numerico

    [EDIT]
    Non ho avuto più notizie, ma non mi sono perso d'animo e dopo aver googlato ancora, ho utilizzato la seguente query (leggermente rivista rispetto alla precedente (ad esempio ho inserito manualmente i parametri di filtro che farei recuperare dalle maschere aperte):
    
    SELECT (CASE
    WHEN (select sum (Giorni)  FROM StoricoCongParentale WHERE ((Year(dal))=Year(Getdate())) AND ((IdFigli)<>"113") AND ((CIP)="509981ZU")) IS NOT NULL 
    THEN (select (Sum(Giorni)) FROM StoricoCongParentale 
    	WHERE ((Year(dal))=Year(Getdate())) AND ((IdFigli)<>"113") AND ((CIP)="509981ZU"))
    ELSE "0"
    END) AS TotAnno
    
    Questa, eseguita direttamente nel motore SQL Server, funziona perfettamente (sostituendo le virgolette con gli apici), ma sull'Access restituisce un errore:
    EsitoAccess.JPG
    EsitoAccess.JPG

    Qualche indicazione in proposito?
    Qual'é "l'operatore mancante" a cui si riferisce il messaggio?
    Allegati:
    26176_bf53bf70f950c88ecde68e16438860c5.jpg
    26176_bf53bf70f950c88ecde68e16438860c5.jpg
  • Re: Query: Impostare il risultato di un conteggio numerico

    Ho risolto utilizzando la funzione IIF, con la quale ho litigato non poco
    Grazie lo stesso
Devi accedere o registrarti per scrivere nel forum
4 risposte