reports, clausola group by a più livelli non consentita in una sotto query

Anonimo
2013-02-19T22:20:32+00:00

ciao a tutti,

la seguente query è il recordSource di un report che restituisce l'errore sopra citato :

SELECT crst.id_righeFattura, crst.id_fattura, crst.id_famiglie, crst.qta,

                   (select sum(qta) from tbl_righe_fattura as crst2 where crst2.id_fattura=crst.id_fattura) AS t

FROM tbl_righe_fattura AS crst

significa che per visualizzare il totale del campo qta nel report è necessario eseguire una query in una query in cui la query figlia sia in join con la tabella  tbl_righe_fattura  in modo che il campo ottenuto, nella soluzione della query principale abbia il compito di visualizzare il sum(qta) nel report?

così :

SELECT tbl_righe_fattura.id_righeFattura, tbl_righe_fattura.id_fattura, tbl_righe_fattura.id_famiglie, tbl_righe_fattura.qta, Query2.SommaDiqta

FROM tbl_righe_fattura INNER JOIN Query2 ON tbl_righe_fattura.id_fattura = Query2.id_fattura;

grazie per l'attenzione e buona notte.

Sandro.

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2013-02-20T15:39:52+00:00

ciao Giorgio,

grazie ancora. Non mi è chiaro però perchè in presenza di raggruppamento nei reports il comportamento sia normale... :-(.

Essendo un valora già calcolato in una query perchè a differenza degli altri campi non viene visualizzato nel report e si scatena quell'errore?

Se hai ancora un po' di tempo da dedicare a questa ulteriore spiegazione ....

ciao e grazie,

Sandro.

Ciao Sandro,

ora non conosco esattamente i meccanismi interni del report ma supponendo un raggruppamento l'istruzione Sql diventerebbe:


SELECT crst.id_righeFattura, crst.id_fattura, crst.id_famiglie, crst.qta,

(select sum(qta) from tbl_righe_fattura as crst2 where crst2.id_fattura=crst.id_fattura) AS t

FROM tbl_righe_fattura AS crst

GROUP BY crst.id_righeFattura, crst.id_fattura, crst.id_famiglie, crst.qta,

(select sum(qta) from tbl_righe_fattura as crst2 where crst2.id_fattura=crst.id_fattura)


che in Access da errore di sintassi, in altri motori di database da l'errore: "Impossibile utilizzare un'aggregazione o una sottoquery nelle espressioni utilizzate per l'elenco di una clausola GROUP BY."

E' per questo motivo che secondo me è prevedibile, ma è solo una mia supposizione, solo un membro del team di Access potrebbe darti la spiegazione esatta.

:-)

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

8 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-02-20T10:49:46+00:00

    Ciao Sandro,

    la tua considerazione su Dsum

    [Cit]

    Dsum viene eseguita su ogni record della query e di conseguenza le performance dovrebbero risentirne (su un notevole numero di records).

    [/Cit]

    è esatta ma lo stesso comportamento si applica anche alla subquery che hai mostrato


    SELECT crst.id_righeFattura, crst.id_fattura, crst.id_famiglie, crst.qta,

    (select sum(qta) from tbl_righe_fattura as crst2 where crst2.id_fattura=crst.id_fattura) AS t

    FROM tbl_righe_fattura AS crst


    è per questo motivo che ho suggerito Dsum come alternativa.

    Per ottenere migliori prestazioni è sicuramente valida la soluzione che hai adottato della query in Join con la tabella.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-02-20T10:46:05+00:00

    ...ancora una Giorgio...con Dum o con la sottoQuery evito il problema dell'errore dell'apertura del report quello scritto in oggetto... E' secondo te un mio errore, un bug, un limite di Access oppure è corretto che se un report ha quel tipo di query come recordSource (query con subQuery), restituisca l'errore in oggetto? anche sulle versioni precedenti AXP o 2003, il 2007 non l'ho mai usato, ricordo che riscontravo questo "problema", risolto sempre con sottoquery...

    che dici?

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-02-20T10:37:50+00:00

    ciao Giorgio,

    grazie per la risposta.

    Dsum mi piace poco, anche sulle maschere per esempio per calcoli anche banali come la somma di valori contenuti in una serie di controlli anzichè invocare Dum o in una casella di testo =somma(qta) preferisco aprire un recordset e assegnare il calcolo al controllo non associato casella di testo (prelevandolo dal recordset) preposta per contenere il calcolo (spero di essermi spiegato), anche per evitare il "ritardo" di visualizzazione del calcolo nella maschera nel controllo della maschera, con il recordset ho notato che il calcolo viene visualizzato immediatamente.

    Dsum viene eseguita su ogni record della query e di conseguenza le performance dovrebbero risentirne (su un notevole numero di records).

    Valuto il da farsi, l'importante per me è capire se il ragionamento fatto è corretto(....vedi funzione di arrotondamento di qualche giorno fa... ;-))))!!!)

    Grazie ancora, Giorgio e buona giornata a te!

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-02-20T07:48:25+00:00

    Ciao Sandro,

    sì, è un metodo, se le prestazioni sono accettabili puoi fare a meno della Query2 e usare una Dsum.


    SELECT crst.id_righeFattura, crst.id_fattura, crst.id_famiglie, crst.qta,

    Dsum('qta','tbl_righe_fattura','id_fattura = ' & id_fattura) AS t

    FROM tbl_righe_fattura AS crst


    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento