Newsgroup: it.comp.appl.access
Titolo: Realizzazione di una query

Sembra che il mio problema non abbia soluzione (Vedi "Report multicolonna a 
raggruppamento singolo" e "FU: Report multi colonna a ragg singolo").
Ho deciso pertanto di andare a monte del problema ed eliminare il 
sottoreport (visto che, se leggete FU, il report senza sottoreport da solo 
funziona bene).
Per farlo devo però generare una query (quella di origine del report) che 
non so realizzare e per la quale chiedo cortesemente supporto.
La tabella su cui effettuare la query è:
idGruppo        idTipo        Quantità
1                    1                10
1                    2                26
1                    3                10
1                    4                17
1                    5                9
2                    1                6
2                    2                16
2                    3                19
2                    4                10
2                    5                25
3                    1                8
3                    2                12
3                    3                7
3                    4                18
3                    5                21
Il numero degli idGruppo e degli idTipo non sono noti a priori (attualmente 
sono 7 e 35, ma potrebbero variare nel tempo; nell'esempio ne ho messi 3 e 
5).
La query dovrebbe riportarmi i primi 3 valori per ciascun gruppo ordinati 
per quantità, ossia:
idGruppo        idTipo        Quantità
1                    2                26
1                    4                17
1                    1                10
1                    3                10 (idTipo 1 e 3 hanno stessa Q.)
2                    5                25
2                    3                19
2                    2                16
3                    5                21
3                    4                18
3                    2                12
Non trovo soluzione senza spezzare la query (ossia come sto facendo 
attualmente, con un report che passa l'idGruppo a un sottoreport che ha come 
base una query con la clausola sql TOP 3 davanti).
Eventualmente potrei crearmi una collection/array con queste info attraverso 
VBA, ma poi come la pongo come fonte dati del report?
Se qualcuno più esperto di me può dare seguito al mio post, mi farebbe 
felice.
Mi acconteterei anche di un "non si può fare" se effettivamente è così!
Ciao

 Mi acconteterei anche di un "non si può fare" se effettivamente è così!
Ciao Wrugaian,
si che si può fare.
Data una tabella di nome Tab1 con i tuoi campi valorizzati come da tuo
esempio,
questa query
----
SELECT *
FROM Tab1
WHERE Quantità IN (SELECT TOP 3 Quantità
                   FROM Tab1 AS T1
                   WHERE Tab1.IdGruppo=T1.IdGruppo ORDER BY Quantità DESC)
ORDER BY IdGruppo,Quantità DESC
----
restituisce il risultato che hai mostrato.
Ciao
-- 
Giorgio Rancati
[Office Access MVP]

 restituisce il risultato che hai mostrato.
Perfetto.. Grazie..
Non sapevo di poter innestare istruzioni sql
Grazie!! 

 restituisce il risultato che hai mostrato.
Scusa se chiedo, ma la sql che mi hai dato funziona anche se l'origine dati 
č una query anzichč una tabella?
Applicando la tua sql a una tab di prova funziona egregiamente, ma se metto 
come base dati una query (che di fatto ha come output esattamente le stesse 
cose) mi fa vedere solo un idGruppo con tutti i valori.
Forse sbaglio io da qualche parte.. 

 Forse sbaglio io da qualche parte..
Se no ci dai l'istruzione che hai inserito è difficile capirlo
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

"Wrugaian" <wrugai...@NOSPAMemail.it> ha scritto nel messaggio
news:kMWRf.34234$PR2.6...@twister2.libero.it...

penso di sě, ma non escludo nulla :-)
fai una semplice prova, copia la tua query e salvala con nome Tab1, poi
provi ad eseguire quella che ti ho suggerito.


 provi ad eseguire quella che ti ho suggerito.
L'istruzione sql della query di origine è un po' complessa e mette assieme 
dati che vengono da altre query.
Per quanto sono convinto che possiate aiutarmi, non vi metterei mai la sql 
di n query da spulciare.. sarebbe disumano :o)
Cmq ho provato quello che mi hai detto e se metto come base dati la query in 
questione mi torna tutti i valori dell'ultimo idGruppo (come se non facesse 
il TOP 3 e non mantenesse i precedenti confronti), se copio e incollo il 
risultato della query in questione su nuova tabella la tua sql funziona 
bene..
Evidentemente da qualche parte nelle n query c'è qualcosa che fa a pugni!
Proverò a semplificare la catena..
Intanto grazie..

 Intanto grazie..
Ciao Wrugaian,
si, è già capitato anche a me :-(
Access non è molto affidabile quando esegue query che richiamano query
complicate e con funzioni di aggregazione.
Non tribolare, ti conviene trasformare la tua query in una query di
accodamento e  travasare il risultato in una tabella temporanea.


 accodamento e  travasare il risultato in una tabella temporanea.
Ci avevo pensato, ma poi ho cruduto di tribolare e capire.. :o) tanto c'è 
solo politica in TV..
Ho scoperto che quello che dava fastidio era Quantità che in una query 
precedente si compilava come COUNT di un dato campo.
Quindi, dopo averla capita, ho modificato la tua sql con
SELECT *
FROM Q1
WHERE idTipo IN (SELECT TOP 3 idTipo
                        FROM Q1 AS T1
                        WHERE Q1.idGruppo=T1.idGruppo
                        ORDER BY Quantità DESC)
ORDER BY idGruppo, Quantità DESC
Il risultato non cambia in quanto la nested sql prende i primi 3 record 
determinati dall'ordinamento, che è sulla Quantità.
Ad Access dava fastidio che gli passassi Quantità nella nested.
Cmq alla fine non mi è servito, in quanto il report che viene fuori non mi 
piace.. ;o)
Non è che per caso tu mi sai dare un perchè al mio post FU: Report multi 
colonnaa ragg singolo?
Grazie cmq di tutto, ho imparato una cosa nuova! 

 Grazie cmq di tutto, ho imparato una cosa nuova!
;-)
