Newsgroup: it.comp.appl.access
Titolo: Qry di selezione

Ragazzi Buon Natale a tutti.
Dovevo risolvere prima di Natale il seguente problema:
Ho un db composto da una tabella clienti e una tabella movimenti, il mio
capo vuole vedere gli ultimi due movimenti di tutti i clienti
che sono circa 2000 come faccio?
Vi prego datemi qualche indicazione.
Ciao e buone feste

"Marina F." <1@l1> ha scritto nel messaggio
news:D%wGb.212491$e6.81...@twister2.libero.it...

BuonNatale anche a te.
Spero tu non debba lavorare anche domani.....!!!
Fai una QRY in cui metti sia la tabella Movimenti che la Clienti
relazionate come sono nel tuo progetto sicuramente
1(Clienti)---oo(Movimenti)
quindi inserisci i campi che ritieni nella QRY ricordandoti
che puoi sfuttare l'AUTOLOOKUP, vale a dire la proprietà automatica
di ottenere i dati relativi da entrambe le tabelle in modo da avere una
visualizzazione più consona.
Quindi Ordina per Cliente, se può esserti utile puoi Raggruppare gli Ordini,
ma devi vedere tu.
Ciao.
@Alex.

Ciao Alessandro le tabelle sono relazionate 1 a molti come hai giustamente
intuito
ma non capisco cos'è l'AUTOLOOKUP!.
Ciao

 > > Ciao e buone feste a tutti

"Marina F." <1@l1> ha scritto nel messaggio
news:SBxGb.212512$e6.81...@twister2.libero.it...

Se ad ogni movimento tu gli hai associato la data nel quale è stato
effettuato, fai una query ordinata per quest'ultima (decrescente) e ti fai
restituire i primi 2 record (Top 2)...
Ciao.
--
Sergio MAZZA

 Caro Sergio,
E' evidente che ad ogni movimento ho associato una data ma se faccio quello
che mi ha detto la qry mi restituisce solo gli ultimi 2 movimenti e basta;
mentre mi è stato chiesto di visualizzare gli ultimi 2 movimenti DI TUTTI I
CLIENTI e tengo a precisare che un cliente può aver fatto
20 movimenti nell'ultimo mese e un altro cliente può aver fatto 5 movimenti
nell'intero anno.
Ero convinta ormai di riuscire a padroneggiare il programma come volevo, mi
devo ricredere, a fronte di una richiesta quasi banale non
sono in grado di trovare la soluzione adeguata.
Spero che alcuni di voi abbiano le capacità per darmi una mano.

 Caro Sergio,
E' evidente che ad ogni movimento ho associato una data ma se faccio quello
che mi ha detto la qry mi restituisce solo gli ultimi 2 movimenti e basta;
mentre mi è stato chiesto di visualizzare gli ultimi 2 movimenti DI TUTTI I
CLIENTI e tengo a precisare che un cliente può aver fatto
20 movimenti nell'ultimo mese e un altro cliente può aver fatto 5 movimenti
nell'intero anno.
Ero convinta ormai di riuscire a padroneggiare il programma come volevo, mi
devo ricredere, a fronte di una richiesta quasi banale non
sono in grado di trovare la soluzione adeguata.
Spero che alcuni di voi abbiano le capacità per darmi una mano.
Ciao a tutti


Ciao Marina,
supponiamo di avere queste tabelle
Clienti
-----------------
Id_Cliente (int)
Nome       (testo)
----------------
CliMov
-----------------
Id_Cliente (int)
Data  (data)
Descrizione (testo)
------------------
la query
--------------------------------------------------
SELECT Nome,data,Descrizione
From Clienti INNER JOIN CliMov ON Clienti.Id_Cliente=CliMov.Id_Cliente
WHERE Data IN (SELECT TOP 2 Data
               FROM CliMov C
               WHERE Id_Cliente=CliMov.Id_Cliente
               ORDER BY Data DESC)
ORDER BY Nome,Data
-------------------------------------------------
Ciao Giorgio

 Giorgio sei grande
C'ero quasi riuscita ma tralasciavo la C prima della clausola Where per
questo mi dava soltanto due movimenti
Spiegami a cosa serve.
Un saluto e Buone Feste
Marina


Ciao Marina
La subQuery seleziona le righe dalla tabella CliMov ma la stessa tabella č
presente nella SELECT principale quindi č necessario assegnare un' ALIAS in
altro caso la clausola WHERE non saprebbe a che tabella si riferisce
Id_Cliente.
Forse cosě č piů chiaro.
 --------------------------------------------------
 SELECT Nome,data,Descrizione
 From Clienti INNER JOIN CliMov ON Clienti.Id_Cliente=CliMov.Id_Cliente
 WHERE Data IN (SELECT TOP 2 Data
                FROM CliMov AS C
                WHERE C.Id_Cliente=CliMov.Id_Cliente
                ORDER BY Data DESC)
 ORDER BY Nome,Data
 -------------------------------------------------
Come vedi la WHERE della subquery  confronta l'Id_Cliente della sua tabella
CliMov a cui ho assegnato l'alias C con l'Id_Cliente della tabella CliMov
presente nella SELECT principale
----------------------
WHERE C.Id_Cliente=CliMov.Id_Cliente
---------------------
Ciao Buone Feste
Giorgio

  Ciao Giorgio



[CUT]
Ti è scappato il messaggio o non riesci a vedere la risposta ?
Ciao Giorgio

 In effetti non vedevo il messaggio trasmensso e tantomeno la tua risposta
ora e tutto OK.
Ciao e buon anno