Newsgroup: it.comp.appl.access
Titolo: Query a campi incrociati (credo)

Ciao a tutti,
ho una tabella magazzino contenente i campi "Prodotto" "Costo Prodotto"
"Fornitore Prodotto" "Data Movimento" dove la data movimento è scritta come
testo (non formato data).
Vorrei fare una query che mi restituisca più colonne con il confronto tra
anni dei movimenti di magazzino.
Esempio:
Descrizione   Anno 2000    Anno 2001   Anno2002
Prodotto 1      1000,00         950,52         1052,23
Prodotto 2        350,52         452,73          521,36
Io ho provato a fare una query a campi incrociati, ma con scarsi risultati
(è la prima volta che mi cimento in questo tipo di query) e non ho neppure
trovato esempi simili sul mio libro di Access.
Vorrei sapere se si può fare e come dovrei fare.
Uso Access 2000 e Win 98SE
Grazie a tutti.
Giuseppe



C'è un ottimo esempio su NorthWind di query a campi incrociati (Ordini
trimestrali per prodotto).
Con qlc modifica ( tipo "Format(DataOrdine, "mmm") "( con il punto e
virgola dentro il QBE) sul campo che fa da Pivot (intestazione colonna
sul QBE) e il cambio dell'intestazione colonna.
Faccio il copia/incolla delle differenze di codice:
++++++++++++++++
Query per trimestri:
TRANSFORM Sum(CCur([Dettagli
ordini].PrezzoUnitario*[Quantità]*(1-[Sconto])/100)*100) AS
ImportoProdotto
SELECT Prodotti.NomeProdotto, Ordini.IDCliente, Year([DataOrdine]) AS
AnnoOrdine
FROM Prodotti INNER JOIN (Ordini INNER JOIN [Dettagli ordini] ON
Ordini.IDOrdine=[Dettagli ordini].IDOrdine) ON
Prodotti.IDProdotto=[Dettagli ordini].IDProdotto
WHERE (((Ordini.DataOrdine) Between #1/1/1997# And #12/31/1997#))
GROUP BY Prodotti.NomeProdotto, Ordini.IDCliente, Year([DataOrdine])
PIVOT "Trimestre " & DatePart("q",[DataOrdine],1) In ("Trimestre
1","Trimestre 2","Trimestre 3","Trimestre 4");
+++++++++++++++++++++
+++++++++++++++++++++
Query per mesi:
TRANSFORM Sum(CCur([Dettagli
ordini].PrezzoUnitario*[Quantità]*(1-[Sconto])/100)*100) AS
ImportoProdotto
SELECT Prodotti.NomeProdotto, Ordini.IDCliente, Year([DataOrdine]) AS
AnnoOrdine
FROM Prodotti INNER JOIN (Ordini INNER JOIN [Dettagli ordini] ON
Ordini.IDOrdine = [Dettagli ordini].IDOrdine) ON Prodotti.IDProdotto =
[Dettagli ordini].IDProdotto
WHERE (((Ordini.DataOrdine) Between #1/1/1997# And #12/31/1997#))
GROUP BY Prodotti.NomeProdotto, Ordini.IDCliente, Year([DataOrdine])
PIVOT Format([DataOrdine],"mmm") In
("Gen","Feb","Mar","Apr","Mag","Giu","Lug","Ago","Set","Ott","Nov","Dic");
Nel tuo caso, per farlo per anni con l tua tabella, farei una cosa
simile:
TRANSFORM Sum([Costo Prodotto]) AS Somma
SELECT Prodotto 
FROM TuaTabella
GROUP BY Prodotto
PIVOT Year([Data Movimento])
Nel caso tu abbia più tabelle da cui prelevare , dovresti avere
l'accortezza di fare prima una query per slezionare i campi che ti
interessano.
Ach , dannazione vedo adesso che hai messo la data come testo ( ma
perchè poi , che è così comodo il formato data ).
A questo punto devo pensare un attimo ... numble ... numble ....: puoi
estrarre la parte di stringa con l'anno ( con mid , left o right ,
dipende da dove l'hai messo tu l'anno) e creare le intestazione
appriopriate: provando a me è riuscito (  Mid([Data Movimento], 7) ,
immaginando una data in formato dd/mm/yyyy).
Ciao. Fabrizio.
(Access XP (sp2), Win ME, P4 1Ghz, 320 RAM)

"oizirbaF" <fabrizio...@SPAMtiscalinet.it> ha scritto nel messaggio
news:1tie1v8g1m6c7d3bo...@4ax.com...

Grazie mille!!!
Con i tuoi preziosi suggerimento sono riuscito!!!!
Ciao.
Giuseppe