Discussione:
Sommare campi dentro query annidate?
(troppo vecchio per rispondere)
alex71
2010-03-11 09:06:18 UTC
Permalink
Ciao a tutti, ho questo problema ,
Da una pagina asp mi collego al db access per fare una query che mi
deve dare la somma di 1 campo in base a 2 criteri.
Per motivi poi di impaginazione a video ho scartato l'ipotesi di
creare 2 query vorrei sapere se è possibile fare tutto con una.
Pensavo di fare una select annidata tipo questa ma non funziona nel
senso che mi dice impossibile trovare oggetto(sommatot) che poi è il
mio alias della query annidata.
-------------------------------------------------------
sql="SELECT count(id) as sommaid, SUM(pesoreale) as sommapeso,citta
FROM FORMULARI WHERE Data >=#" & strDate1 & "#AND Data <=#" & strDate2
& "#"
SQL=SQL & " and denom_rifiuto in('15.01.01','15.01.02','15.01.03')"
SQL=SQL & " and (select sum(pesoreale)as sommatot from formulari where
denom_rifiuto in('15.01.06'))"
SQL=SQL & " group by formulari.citta"
-------------------------------------------------------------
come posso estrapolare la somma di un campo con più criteri?
Grazie
OneEDP
2010-03-11 10:58:56 UTC
Permalink
Post by alex71
Ciao a tutti, ho questo problema ,
Da una pagina asp mi collego al db access per fare una query che mi
deve dare la somma di 1 campo in base a 2 criteri.
Per motivi poi di impaginazione a video ho scartato l'ipotesi di
creare 2 query vorrei sapere se è possibile fare tutto con una.
Pensavo di fare una select annidata tipo questa ma non funziona nel
senso che mi dice impossibile trovare oggetto(sommatot) che poi è il
mio alias della query annidata.
-------------------------------------------------------
sql="SELECT count(id) as sommaid, SUM(pesoreale) as sommapeso,citta
FROM FORMULARI WHERE Data>=#"& strDate1& "#AND Data<=#"& strDate2
& "#"
SQL=SQL& " and denom_rifiuto in('15.01.01','15.01.02','15.01.03')"
SQL=SQL& " and (select sum(pesoreale)as sommatot from formulari where
denom_rifiuto in('15.01.06'))"
SQL=SQL& " group by formulari.citta"
-------------------------------------------------------------
come posso estrapolare la somma di un campo con più criteri?
Grazie
Sei leggermente OT

Ci sono errori di sintassi
Prova così

sql= _
"SELECT "& _
"count(id) as sommaid, "& _
"SUM(pesoreale) as sommapeso, "& _
"F.citta "& _
"FROM FORMULARI F "& _
"WHERE "& _
"F.Data Between #"& strDate1& "# AND #"& strDate2& "# "& _
"AND F.denom_rifiuto in ('15.01.01', '15.01.02', '15.01.03') "& _
"AND "& _
"(select sum(nz(FS.pesoreale)) as sommatot from formulari FS "& _
"where FS.denom_rifiuto in('15.01.06')) "& _
"GROUP BY "& _
"F.citta"

Cmq questa è solo una correzione alla sintassi , ma non alla risoluzione
del problema che non ho compreso
Se vuoi che venga restituito sommatot devi rivedere completamete la
select con una istruzione del tipo

select
.,
.,
(select sum(nz(FS.pesoreale)) as sommatot from formulari FS
where FS.denom_rifiuto in (....))
) As SommaTotale,
...
where
data between

... esplicita sempre gli alias
Ciao
Daniele
alex71
2010-03-15 13:47:57 UTC
Permalink
Ciao grazie per la tua risposta ero fuori per lavoro e solo oggi
riesco ad andare avanti con questo progetto.
Dunque in sostanza non ho ben capito il tuo secondo esempio che è
quello che io vorrei far eseguire.
In sostanza questa è la query che uso attualmente e ad essa devo
aggiungere un alias(sommatot) che mi porti anche la somma di un altro
parametro (denom_rifiuto=15.01.06))
-----------------------------------------------------------------
sql="SELECT count(id) as sommaid, SUM(pesoreale) as sommapeso,citta
FROM FORMULARI WHERE Data >=#" & strDate1 & "#AND Data <=#" & strDate2
& "#"
SQL=SQL & " and denom_rifiuto ='15.01.01'"
SQL=SQL & " group by formulari.citta"
---------------------------------------------------------

tu mi hai fatto un esempio ma non ho ben capito la struttura e cosa
mettere prima del ...where data between

(select sum(nz(FS.pesoreale)) as sommatot from formulari FS
where FS.denom_rifiuto in (....))
) As SommaTotale,
...
where
data between
-----------------------------------------------
grazie comunque per il tuo aiuto
OneEDP
2010-03-15 16:00:48 UTC
Permalink
Post by alex71
Ciao grazie per la tua risposta ero fuori per lavoro e solo oggi
riesco ad andare avanti con questo progetto.
Dunque in sostanza non ho ben capito il tuo secondo esempio che è
quello che io vorrei far eseguire.
In sostanza questa è la query che uso attualmente e ad essa devo
aggiungere un alias(sommatot) che mi porti anche la somma di un altro
parametro (denom_rifiuto=15.01.06))
-----------------------------------------------------------------
sql="SELECT count(id) as sommaid, SUM(pesoreale) as sommapeso,citta
FROM FORMULARI WHERE Data>=#"& strDate1& "#AND Data<=#"& strDate2
& "#"
SQL=SQL& " and denom_rifiuto ='15.01.01'"
SQL=SQL& " group by formulari.citta"
---------------------------------------------------------
tu mi hai fatto un esempio ma non ho ben capito la struttura e cosa
mettere prima del ...where data between
(select sum(nz(FS.pesoreale)) as sommatot from formulari FS
where FS.denom_rifiuto in (....))
) As SommaTotale,
...
where
data between
-----------------------------------------------
grazie comunque per il tuo aiuto
select
MiaColonna1,
MiaColonna2,
(select sum(nz(FS.pesoreale)) as sommatot from formulari FS
where FS.denom_rifiuto in (....))
) As SommaTotale
where
data between 1/1/2010 and 31/12/2010

Loading...