Newsgroup: it.comp.appl.access
Titolo: subtotale in form record continui

buongiorno a tutti, ho la necessità di avere un subtotale di un importo in euro ogni volta che termina una settimana
 
esempio
 
lunedì 21/03/2022 - 10,00 €
martedì 22/03/2022 - 15,00 €
sabato 26/03/2022 - 18,00 €
domenica 27/03/2022 - 13,00 €
totale numero settimana x importo 56,00 €
 
lunedì 28/03/2022 - 8,00 €
mercoledì 30/03/2022 - 2,00 €
domenica 03/04/2022 - 8,00 €
totale numero settimana x importo 18,00 €
 
pensavo di usare una sottomaschera e di raggruppare in qualche modo i record ma non so come precodere, qualcuno ha qualche idea?


Ciao TmTu,
supponendo che tu abbia una tabella con i campi ID, GiornoSett, dData e Importo, potresti creare una query con la somma di Importo e il campo calcolato nSett (numero settimana ottenuto con la funzione DatePart):
 
  SELECT DatePart("ww",[dData]) AS nSett, Sum(TotSettimana.[importo]) AS TotSett
  FROM TotSettimana
  GROUP BY DatePart("ww",[dData]);
 
Il risultato sarà la somma degli importi per numero di settimana:
  nSett	TotSett
      13	        43
      14	        23
      15	          8


tabella entrate con
 
datap : data
importo: valuta
id: contatore
 
 
sql:
 
select a.datap, a.importo  from(
 
SELECT Entrate.datap, Entrate.importo, Entrate.ID, 
DatePart('ww',[datap],2) AS Sett
FROM Entrate
ORDER BY  DatePart('ww',[datap],2), id
 
UNION select null, sum(importo),32, DatePart('ww',[datap],2) AS Sett 
from entrate group by DatePart('ww',[datap],2)) as a
 
order by a.sett, 
a.id
 
 
 
risultato
https://i.imgur.com/fhxyIaU.png
 
 
BFS
 
 
 
 
 
-- 
Questa email è stata esaminata alla ricerca di virus da AVG.
http://www.avg.com
 
 

        15	          8
 
che non coincidono con i suoi...
nella funzione datepart va impostato anche che giorno della settimana va 
considerato come il primo
 
in italia, il lunedi quindi
DatePart("ww",[dData],2)
 
se lasci solo DatePart("ww",[dData]) viene considerata la domenica



Vero! Grazie per aver controllato.


ci provo grazie nel frattempo


ho provato cosi ma aprendo la query mi esce il messaggio seguente: "immettere valore parametro a.idutente"
i campi della mia tabella sono questi 
id, idutente, datastampa, orastampa, data, ora, importo, sf, descrizione
 
 
***CODICE SQL PROVATO***
SELECT a.idutente, a.datastampa, a.orastampa, a.data, a.ora, a.importo, a.sf, a.descrizione
FROM (SELECT log.data,log.importo,log.ID,
DatePart('ww',[data],2) AS Sett 
FROM log
ORDER BY DatePart('ww',[data],2),id
 
UNION select null, sum(importo),32, DatePart('ww',[data],2) AS Sett
from log group by DatePart('ww',[data],2))  AS a
ORDER BY a.sett, 
a.id
;
 
 
 


ti da errore perchè hai una select per un campo idutente :
SELECT a.idutente
 
che lui si aspetta di trovare in
 
SELECT log.data,log.importo,log.ID,
DatePart('ww',[data],2) AS Sett
 
ma che invece non c'è
 
inoltre fai una union di due query che hanno un numero diverso di colonne
 
 
 
BFS
 
 


ho modificato la query come segue ma non è esattamente lo stesso aspetto del tuo esempio, ho aggiunto anche una tabella per prelevare cognome e nome
ottengo però i 2 totali di due settimane in alto e gli altri record di seguito sotto, mentre il tuo esempio mostra i giorni poi totale settimana poi altri giorni e altro totale settimana
è un problema solo di ordinamento ma non so cosa modificare
 
**code sql**
SELECT utenti.Cognome, utenti.Nome, a.idutente, a.data, a.sf, a.descrizione, 
a.id
, a.importo
FROM (SELECT log.idutente,log.importo,log.data,log.sf,log.descrizione,log.ID,
DatePart('ww',[data],2) AS Sett 
FROM log
ORDER BY DatePart('ww',[data],2),id
 
UNION select null, sum(importo),32, DatePart('ww',[data],2),null,null,null AS Sett
from log group by DatePart('ww',[data],2))  AS a LEFT JOIN utenti ON a.idutente = utenti.ID
ORDER BY a.sett, 
a.id
;
 
la query la apre e ottengo quanto segue
 
cognome-nome-idutente-data-sf-descrizione-id-importo
null-null-null-32-12-null-null-150
null-null-null-32-13-null-null-15
rossi-mario-7-18/03/2022-18-1-28-50€
rossi-mario-7-17/03/2022-19-1-29-50€
rossi-mario-7-16/03/2022-20-1-30-50€
rossi-mario-7-24/03/2022-10-1-20-10€
rossi-mario-7-23/03/2022-12-1-22-5€
 
mentre mi aspettavo
rossi-mario-7-16/03/2022-20-1-30-50€
rossi-mario-7-17/03/2022-19-1-29-50€
rossi-mario-7-18/03/2022-18-1-28-50€
null-null-null-32-12-null-null-150
rossi-mario-7-23/03/2022-12-1-22-5€
rossi-mario-7-24/03/2022-10-1-20-10€
null-null-null-32-13-null-null-15
 
cosa sbaglio?


Prova a sostiuire la riga
UNION select null, sum(importo),32, DatePart('ww',[data],2),null,null,null AS Sett
con
UNION SELECT null, sum(importo), 32, null, null, null, DatePart('ww',[data],2) AS Sett


che non stai unendo le colonne correttamente
 
 
sulla prima in terza posizione hai idutente
nella seconda in terza posizione hai  32
 
e cmq l'id serve solo per dare un ordine alle righe del mio esempio, nel 
tuo caso non so cosa rappresenti. devi assicurarti di avere un valore 
nella seconda che sia sempre maggiore della prima per poi poterle ordinare
 
studiati le query di unione
 
https://support.microsoft.com/en-us/office/use-a-union-query-to-combine-multiple-queries-into-a-single-result-1f772ec0-cc73-474d-ab10-ad0a75541c6e
 



funziona grazie a tutti