Newsgroup: it.comp.appl.access
Titolo: query particolare (per esperti SQL)

Ciao,
devo creare una query di questo tipo:
tabellaClienti (elenco clienti)
tabellaCrediti (elenco crediti con ID riferito alla tabella clienti)
tabellaModalitàdipagamento (elenco modalità di pagamento singoli
clienti)
vorrei visualizzare solo i "singoli" clienti che hanno delle riba
prossime alla scadenza per poterli chiamare.
L'elenco dei clienti l'ho già fatto pero' ho il problema che i clienti
spesso hanno più fatture in scadenza / scadute e quindi la lista si
popola di molti record duplicati dato che in questa lista non mi
interessa sapere che tizio ha 3 fatture da pagare ma solo che tizio ha
delle fatture da pagare. Poi quali lo vedo già in altro modo.
E' possibile quindi, una volta creata la query scrivere che il campo
ID_CLIENTE (per esempio) non deve esistere più di una volta nel
recordset?
Grazie mille per l'aiuto,
Mecch

 ha scritto nel messaggio

Ciao,
come al solito sarebbe stato meglio dare un subj piu' consono piuttosto che
iserirvi considerazioni quanto meno azzardate.
Il tuo problema non e' ne' particolare ne' per esperti, bensi' e' una delle
prime cose che su studiano sulle query.
Cio' che ti server e' una banale query di raggruppamento che mostri la data
piu' prossima.
Sib

 ha scritto nel messaggio
news:4f39271b.0307...@posting.google.com...

Ciao Mecch
Oltre al suggerimento di Sib sul raggruppamento c'è un'altro modo per
ottenere il risultato.
Puoi utilizzare la clausola DISTINCT
Esempio
--------------------------------------
SELECT DISTINCT
     Clienti.ID,
     Clienti.Nome
FROM
     Clienti LEFT JOIN Crediti
     ON Clienti.Id=Crediti.Id
WHERE Crediti.Scadenza <=#Tuascadenza# AND
               Crediti.Pagato=False
----------------------------------------
La clausola DISTINCT puoi inserirla dalle proprietà della query mettendo a
si la voce Valori Univoci.
I campi delle altre tabelle non devono avere il Check Mostra.
Ciao Giorgio.

Grazie Mille Giorgio Prx,
ho usato la clausola DISTINCT e ha funzionato, in realtà avevo già
provato questo sistema ma non funzionava perchè avevo inserito fra i
campi da visualizzare anche sta roba qua:
IIf(Not IsNull([scadenza]),DateAdd("y",[scadenza],[crediti].[Data]),[crediti].[data]))
che è il campo che mi serve per impostare la condizione di credito in
scadenza se il valore scadenza è effettivamente impostato e quindi
questo era sempre diverso sulle singole fatture e mi mandava a pallino
il DISTINCT
a questo punto mi chiedo: che differenza c'è fra DISTINCT e DISTINCT
ROW?
Saluti,
Mecch

 ha scritto nel messaggio

DISTINCT mostra le righe che presentano valori diversi tra i campi
selezionati
DISTINCT ROW mostra le righe che presentano valori diversi tra TUTTI i campi
delle tabelle che fanno parte della query (ossia il recordset di base da cui
vengono estratti i campi che hai scelto di vedere).
DISTINCT e DISTINCT ROW restituiscono le stesse righe se selezioni tutti i
campi di tutte le tabelle.
Sib

 ROW?
A questo punto io invece ti chiedo: ma tu, che voi fa?!!?
Comunque, santo help in linea, sempre bistrattato:
DISTINCT Omette i record che contengono dati duplicati nei campi
selezionati. Per essere inclusi nei risultati della query, i valori di ogni
campo elencato nell'istruzione SELECT devono essere univoci. Numerosi
impiegati elencati in una tabella Impiegati, ad esempio, potrebbero avere lo
stesso cognome. Se nel campo Cognome due record contengono Rossi, la
seguente istruzione SQL restituirà un solo record contenente Rossi:
SELECT DISTINCT
Cognome
FROM Impiegati;Se si omette DISTINCT, la query restituirà entrambi i record
contenenti Rossi.Se la proposizione SELECT contiene più di un campo, la
combinazione dei valori di tutti i campi per un determinato record deve
essere univoca perché il record venga incluso nei risultati.L'output di una
query che utilizza DISTINCT non è aggiornabile e non riflette le successive
modifiche apportate dagli utenti.
DISTINCTROW Omette i dati basati su interi record duplicati e non solo su
campi duplicati. È possibile, ad esempio, creare una query che esegua il
join della tabella Clienti e della tabella Ordini in base al campo ID
cliente. La tabella Clienti non contiene campi ID cliente duplicati,
contrariamente alla tabella Ordini in quanto ogni cliente può effettuare più
ordini. La seguente istruzione SQL mostra come utilizzare DISTINCTROW per
produrre un elenco di società che abbiano almeno un ordine, senza però
fornire altri dettagli relativi agli ordini:
SELECT DISTINCTROW NomeSocietà
FROM Clienti INNER JOIN Ordini
ON Clienti.IDCliente = Ordini.IDCliente
ORDER BY NomeSocietà;Se si omette DISTINCTROW, questa query produrrà più
righe per ogni società con più di un ordine.DISTINCTROW ha effetto solo
quando si selezionano campi da alcune delle tabelle utilizzate nella query,
ma non da tutte. DISTINCTROW viene ignorato se la query include una sola
tabella o se vengono estratti campi da tutte le tabelle.
Antonio