Newsgroup: it.comp.appl.access
Titolo: query a campi incrociati di queri di unione

ciao.. rieccomi di nuovo qui a litigare con la sintassi :)
Voglio ottenere una certa query a campi incrociati; per la precisione il
codice sql è il seguente:
TRANSFORM Sum([^Vendite-Dettagli].[Imponibile¤]) AS Imponibile¤_col
SELECT [^Vendite-Dettagli].fkVendita AS pkVendita,
Sum([^Vendite-Dettagli].Imponibile¤) AS Imponibile¤_doc
FROM [^Vendite-Dettagli]
GROUP BY [^Vendite-Dettagli].fkVendita
PIVOT [^Vendite-Dettagli].[ColonnaIva];
facile.
Infatti funziona correttamente
(non fate caso ai caratteri strani ^ e ¤.. si tratta di una sorta di
notazione che uso)
però mi genera solo le colonne che effettivamente appaiono specificate in
[^Vendite-Dettagli], siccome io voglio che compaiano con uno zero alcune
colonne importanti (***) ho pensato: "ci aggiungo un record con una query di
unione e il gioco è fatto.."
e così editor alla mano ho aggiunto qualche riga
TRANSFORM Sum([^Vendite-Dettagli].[Imponibile¤]) AS Imponibile¤_col
SELECT [^Vendite-Dettagli].fkVendita AS pkVendita,
Sum([^Vendite-Dettagli].Imponibile¤) AS Imponibile¤_doc
FROM [
   Select fkVendita, Imponibile¤, ColonnaIva from [^Vendite-Dettagli]
   union select 0, 0, '20' from [^Vendite-Dettagli] (****)
   union select 0,0,'10' from [^Vendite-Dettagli]
   union select 0,0,'4' from [^Vendite-Dettagli]
   union select 0,0,'Esc' from [^Vendite-Dettagli]
   union select 0,0,'EsNI' from [^Vendite-Dettagli]
   ]. AS [^Vendite-Dettagli_Completi]
GROUP BY [^Vendite-Dettagli].fkVendita
PIVOT [^Vendite-Dettagli].[ColonnaIva];
Inizialmente credevo funzionasse
solo ad una analisi più attenta mi sono reso conto che però il campo
"valore" dei campi incrociati non fa più la somma (nel sql precedente si!)
ma riporta solo il primo valore che ha trovato..
siccome non sono molto abile con le query a campi incrociati spero
dell'aiuto di un vero programmatore..
un sentito grazie
(***) ps: le colonne sono importanti perchè la query in questione poi verrà
usata come origine di un report. se non mi compaiono non posso sperare di
metterci un controllo che come origine ha proprio quella colonna!
Prendiamo ad esempio "Creare una query a campi incrociati con due campi
valore, due totali di riga dei due campi valore" che si trova nel sitocomune
Infatti se dalle tabelle dei dati si cancellano tutti i dati l'apertura del
report darà errore in quanto non esistono campi nella queri di origine dei
dati che possano essere origine dei controlli..
con questo penso di aver spegato anche il mio 4 in italiano
(****) ps Per Antonio: è qui che mi è nata la curiosità che poi mi ha spinto
a scrivere il post sull'inutilità della clausola from ..

credo di aver risolto l'arcano:
pubblico qui i risultati dei miei sforzi affinche siano utili ad altri :)
scomponendo il problema mi sono accorto che la subquery di unione non
restituiva tutti i record.. facendo qualche prova mi sono accorto che
restituiva solo le righe "diverse"
cioè se quel qualche motivo 2 righe (che mi aspettavo di leggere) erano
uguali la union ne mostrava una sola.. una sorta di select distinctrow
automatico.
ho risolto semplicemente aggiungendo un campo univoco:
TRANSFORM Sum([^Vendite-Dettagli].[Imponibile¤]) AS Imponibile¤_col
SELECT [^Vendite-Dettagli].fkVendita AS pkVendita,
Sum([^Vendite-Dettagli].Imponibile¤) AS Imponibile¤_doc
FROM [Select pkdettaglio,fkVendita, Imponibile¤, ColonnaIva from
[^Vendite-Dettagli]
union select 0,0, 0, '20' from [^Vendite-Dettagli]
union select 0,0,0,'10' from [^Vendite-Dettagli]
union select 0,0,0,'4' from [^Vendite-Dettagli]
union select 0,0,0,'Esc' from [^Vendite-Dettagli]
union select 0,0,0,'EsNI' from [^Vendite-Dettagli]]. AS [%$##@_Alias]
GROUP BY [^Vendite-Dettagli].fkVendita
PIVOT [^Vendite-Dettagli].[ColonnaIva];
ps: se fate un copia e incolla vi consiglio di copiare questo altrimenti
access non riconosce il testo che lui stesso ha corretto!
TRANSFORM Sum([^Vendite-Dettagli].[Imponibile¤]) AS Imponibile¤_col
SELECT [^Vendite-Dettagli].fkVendita AS pkVendita,
Sum([^Vendite-Dettagli].Imponibile¤) AS Imponibile¤_doc
FROM (Select pkdettaglio,fkVendita, Imponibile¤, ColonnaIva from
[^Vendite-Dettagli]
union select 0,0, 0, '20' from [^Vendite-Dettagli]
union select 0,0,0,'10' from [^Vendite-Dettagli]
union select 0,0,0,'4' from [^Vendite-Dettagli]
union select 0,0,0,'Esc' from [^Vendite-Dettagli]
union select 0,0,0,'EsNI' from [^Vendite-Dettagli])
GROUP BY [^Vendite-Dettagli].fkVendita
PIVOT [^Vendite-Dettagli].[ColonnaIva];
ciao ciao