Query con somma a condizione

di il
4 risposte

Query con somma a condizione

Ho un problema con una query apparentemente semplice ma non riesco a venirne fuori:
una tabella principale ANAGRAFE
collegata uno a molti con una seconda tabella GUIDE
dove c'e' un campo numerico ORE con la durata della guida in ore e un altro campo boolean ASSENTE
ho bisogno che la query mi estragga tutte le anagrafiche anche a somma zero
e fin qui nessun problema modificando la join
ma che mi faccia la somma delle ore solo quando il campo ASSENTE e' falso
se nella query aggiungo il campo ASSENTE o me li fa sparire tutti
o mi fa vedere solo le anagrafiche che hanno una somma di ORE >0
Non riesco a trovare dove sbaglio

4 Risposte

  • Re: Query con somma a condizione

    Walter61 ha scritto:


    ... Non riesco a trovare dove sbaglio
    Commetti ben 2 sbagli uno più grave dell'altro.
    Il primo : se non ci mostri la query di cosa parliamo? Del nulla (che molto probabilmente è il tuo problema - un campo null) ?
    Il secondo : da ATARISTA di vecchia data mi urta assai vedere il logo Commodore
  • Re: Query con somma a condizione

    Il c64 lo zx spectrum e l'atari sono tutti preistoria... come me d'altronde
    il problema lo risolvo comunque, l'altro problema e' la mia testardaggine
    la query qryGuideCONTAORE che mi calcola le ore e' questa:
    SELECT Anagrafe.ID_ANAGRAFE, Guide.COD_ANAGRAFE, Anagrafe.NOME, Sum(Guide.ORE) AS SommaDiORE
    FROM Anagrafe LEFT JOIN Guide ON Anagrafe.ID_ANAGRAFE = Guide.COD_ANAGRAFE
    WHERE (((Guide.ASSENTE)<>True))
    GROUP BY Anagrafe.ID_ANAGRAFE, Guide.COD_ANAGRAFE, Anagrafe.NOME;
    cosi' ottengo la somma del campo ore nella tabella Guide
    ma vedo soltanto le anagrafiche dove ci sono ore ovvero dove ci sono records collegati in Guide
    non vedo le anagrafiche a zero ore
    se tolgo la condizione sul campo ASSENTE invece vedo tutte le anagrafiche anche quelle a zero ore... e' questo che non comprendo...
    lo aggiro cosi:
    SELECT Anagrafe.ID_ANAGRAFE, qryGuideCONTAORE.SommaDiORE
    FROM Anagrafe LEFT JOIN qryGuideCONTAORE ON Anagrafe.ID_ANAGRAFE = qryGuideCONTAORE.COD_ANAGRAFE;
    
    cioe' collegando la tabella Anagrafiche alla query qryGuideCONTAORE
    in questo modo vedo tutte le anagrafiche, anche quelle a zero ore
    ma il tormento rimane
  • Re: Query con somma a condizione

    Fai una query che utilizza solo la tabella Guide, dove utilizzi la Where, raggruppi per Cod_Anagrafe e sommi le ore.
    Fai un'altra query dove metti in left join Anagrafe e la query precedente : per tutti i record non abbinati (presenti solo in Anagrafe) dovresti ritrovarti la sommaore = null.
    Se ti urta puoi sempre impostare un iif (direttamente nella query (iif(isnull(campo);0;campo))
  • Re: Query con somma a condizione

    Grazie Max
    la soluzione era tutto sommato semplice
    la madre del mio errore usare la query creata nella fase di debug
    dove mi serviva vedere anche il NOME per fare dei test
    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
4 risposte