Newsgroup: it.comp.appl.access
Titolo: Query a campi incrociati somma anni precedenti e ultimi 3 anni.

Buongiorno,
Ho una tabella(semplifico) con dei movimenti di acquisto e vendita.
 
Articolo Quantità Data Importo
 
vorrei fare una query a campi incrociati dove
nella intestazioni di righe ho l'articolo
nella intestazione di colonne ho gli anni
somma di quantità e somma di importo.
...
 
vorrei avere visualizzato sulla query come intestazione di colonna
 
Articolo Somma Quantità Somma Importo 2019 2018 2017 AnniPrecedenti
 
il problema è che non riesco a creare la colonna con la somma degli anni precedenti.
 
Grazie


NOn basta un cmapo calcolato con l'Anno come Intestazione di Colonna per il raggruppoamento...?
Ovviamente se non hai dati negli anni precedenti... va da se che non puoi popolare qualche cosa che non esiste...
 
@Alex


grazie della disponibilità
metto una tabella con dei dati almeno mi spiego meglio..
 
Articolo 	Qta	data 
A	       1	02/05/2015
B	       1	03/05/2015
C	       1	10/12/2015
A	       1	05/08/2015
B	       2	06/07/2015
C	       3	03/07/2015
C	       1	04/05/2017
A	       2	05/10/2017
B	       1	06/08/2017
A	       1	06/09/2017
B	       1	05/05/2018
C	       1	05/05/2018
A	       1	06/08/2018
B	       2	01/08/2018
C	       3	01/06/2018
C	       1	02/02/2019
A	       2	02/03/2019
B	       1	01/01/2019
 
il risultato della query dovrebbero:
 
ARTICOLO	Somma QTA	Anni Precedenti	2018	2019
A	           8         	5	          1       2
B	           8	        4                 3	  1
c	          10     	5	          4	  1
 
grazie
 
 
 


per come sono messe le cose viene da pensare che:
arriverà il 2020, e il 2012 ...
 
in altre parole:
devi CONSEGNARE un risultato SENZA possibilità di "aggiustamento annuale" ?
(la cosa si fa difficile ...)
 
oppure è un utilizzo "in proprio", e quindi adattabile al cambio anno ?
 
Per il risultato minimale (quello che prospetti di ottenere)
basta fare la query a campi incrociati SU UNA QUERY
che ha un apposito campo calcolato
 
in sintesi: {se minore di annoAttuale-1; PREC; year(data)}
e quel campo diventa la colonna della query a campi incrociati


AGGIUNTA
se il 2017 deve avere una colonna a sè:
il campo calcolato si ottiene così:
{se minore di annoAttuale-2; PREC; year(data)}


Ciao e grazie del consiglio:
allora per dirla tutta (ho molto ridotto la richiesta precedente)
Il db è composto da una tabella movimenti (descritta sopra) da qui con varie query ho estratto:
1 query Anni_Ante_Top4 (con la select top etc etc)
4 query (Anno_0;1;2;3) con gli ultimi 4 anni a partire dal piu recente nella tabella movimenti.
 
cosi ho estratto 5 query
 
1 con tutti i movimenti_ante_top_4
4 con i singoli movimenti degli ultimi 4 anni 
 
Praticamente non so come unire queste due query, in una query a campi incrociati per avere la visualizzazione 
con 
 
Articolo--SommaAnni_Movimenti_ante_top_4--Anno3--Anno2--Anno1--Anno0
 
grazie
 
 
 


la cosa è MOLTO PIU' SEMPLICE
 
basta fare una SOLA query (di preparazione) con un campo calcolato
 
ESEMPIO (del campo calcolato):
colonna: IIf(Year([data])<2019-3;"PREC";Year([data]))
 
NOTE:
-ho scritto 2019 ma va bene (meglio) year(date()) per renderlo "attuale" con il passare degli anni
 
-ho scritto 2019-3 per vedere, separate, le colonne corrispondenti agli ultimi 3 anni
 
-ho scritto "PREC" per ottenere una dicitura A PIACERE, in questo caso di tipo testo, per la colonna che ingloba gli "anni antecedenti"
 
Il campo calcolato colonna diviene poi la effettiva colonna nella query a campi incrociati
è poi da vedere come scrivere la dicitura "ante" per farla apparire prima o dopo gli anni "effettivi"
 
abbozzo della query a campi incrociati
TRANSFORM Sum(qry_dicitura.qta) AS SommaDiqta
SELECT qry_dicitura.articolo
FROM qry_dicitura
GROUP BY qry_dicitura.articolo
PIVOT qry_dicitura.colonna;
 
dove qry_dicitura è la query con il campo calcolato colonna
 

AGGIUNTA
mancava il totale di qta
 
TRANSFORM Sum(qry_dicitura.qta) AS SommaDiqta
SELECT qry_dicitura.articolo, Sum(qry_dicitura.qta) AS tot



Ok Grazie funziona, ho capito:
 
test: IIf(([Articoli]![Anno]<=[Anno-3]![Anno]);"Anni-Pre";[Articoli]![Anno])
 
praticamente nella query hai aggiunto un campo calcolato in cui tutti gli articoli movimentati <= all'anno attuale -3 assegna il valore "Anni-Pre" e da li mi costruisco la mia query a campi incrociati.
 
Semplice e efficace !!
 
grazie