Newsgroup: it.comp.lang.visual-basic
Titolo: DISTINCT con tutti i campi

Non sono assolutamente riuscito a risolvere, nonostante abbia consultato con 
attenzione i vari post sull'argomento, di creare una query SQL (MSAccess) 
che ottenga il risultato desiderato.
Il problema
Avendo i 6 record seguenti (3 campi) :
Cognome   Nome   Eta
TOTO    ANTONIO    71
ROSSI        MARIO    50
VERDI    GIUSEPPE    44
VERDI    GIUSEPPE    45  (Non č un errore, č 45)
PISTA    LUCIANO    33
PISTA     LUCIANO    33
Vorrei ottenere - esattamente - questi 4 record con tutti i 3 campi.
PISTA LUCIANO 33
ROSSI        MARIO    50
VERDI    GIUSEPPE    44  (o anche 45, non importa)
TOTO    ANTONIO    71
Queste sono le istruzioni che ho variamente, con insuccesso, assemblate : 
DISTINCT, WHERE, FIRST, GROUP, HAVING oltre alle solite SELECT e FROM, ORDER 
BY e qualche altra.
Grazie a coloro che vorranno cimentarsi nella risoluzione del mio problema.
AlpVir

 AlpVir
Innanzitutto manca una ChiavePrimaria che non può essere nè nome nè
cognome nè
l'insieme dei 2 Field.
Abitualmente, senza inventarsi nulla di strano si usa il CodiceFiscale.
In ogni caso il risultato dipende molto da come hai scritto la stringa
SQL:
SELECT Test.Cognome, Test.Nome, Test.Età
FROM Test
GROUP BY Test.Cognome, Test.Nome, Test.Età;
oppure
SELECT DISTINCT Test.Cognome, Test.Nome, Test.Età
FROM Test
Queste danno lo stesso identico risultato, ovviamente se l'età è 45 e
44 non è possibile dire non importa, sono 2 dati con valore
differente, e JET è stupido, come tutti i motori, necessita di sapere
come trattare i dati...!
Saluti
@Alex


SELECT Test.Cognome, Test.Nome, Test.Età FROM Test GROUP BY Test.Cognome, 
Test.Nome, Test.Età;
oppure
SELECT DISTINCT Test.Cognome, Test.Nome, Test.Età FROM Test
Il risultato - come da te peraltro ammesso - non è quello desiderato e 
chiarissimamente indicato.
La struttura della mia tabella ed i dati in essa inseriti sono solo un 
esempio. Non ci si dovrebbe fissare sul significato dei campi ma sul loro 
contenuto. Lo so anch'io che una persona non può avere due età (ma ci 
potrebbero essere delle eccezioni a quanto vo affermando).  Mettiamola cosi: 
al posto di età si legga "Telefono" (uno può avere due numeri di telefono, 
giusto ?).
Grazie comunque di averci provato.
AlpVir

AlpVir ha scritto:

No scusa forse non ti è chiara la struttura SQL.... quello che hai
chiesto, se i campi
hanno valori non UGUALI è concettualmente SBAGLIATO, pertanto non è
da chiedere.
Se vuoi raggruppare i dati DEVONO essere RAGGRUPPABILI....!
Ora i casi sono 2:
1) Facci un esempio che sia inequivocabile e si cerca di aiutarti
2) Chiarisciti i criteri di univocità e normalizzazione
Saluti
@Alex


Se vuoi raggruppare i dati DEVONO essere RAGGRUPPABILI....!
Ora i casi sono 2:
1) Facci un esempio che sia inequivocabile e si cerca di aiutarti
2) Chiarisciti i criteri di univocità e normalizzazione
===================================================
A) L'esempio è quello che ho fornito (magari con Telefono che sostituisce 
Eta).
B) Il risultato deve essere quello che ho indicato
C) Se tu mi dici che NON si può fare con una istruzione SQL ne prendo atto, 
anche se ne dubito fortemente. Non ho tuttavia argomenti per provarlo 
(altrimenti non sarei qui a chiedere il tuo - il vostro - aiuto)
In un post passato un tale dal nome ApipApip scriveva
"""
Criterio = "SELECT DISTINCT NOME From ARCHIVIO;"
ma questo mi "fa vedere" SOLO la colonna "NOME" e nel datagrid1 vedo SOLO 
una colonna.
Come posso dirgli di farmi vedere tutte le colonne ma che siano DISTINCT 
unicamente per il NOME?
"""
Detto in altre parole è il mio stesso problema, problema che in quel post 
passato non è stato risolto per motivi che qui non interessa esaminare.
In altre parole considera la stringa SQL una scatola nera (termine noto ai 
fisici). In ingresso c'è il mio esempio; in uscita c'è il risultato.
Come "lavora" la scatola nera ?
Grazie ancora e ciao
AlpVir

 problema. AlpVir
Dal momento che hai detto che non ti importa cosa ti venga restituito da Età 
la select può essere la seguente:
SELECT Nome, Cognome, Min(Eta) AS MinDiEta
FROM Anagrafica
GROUP BY Nome, Cognome;
William. 

 William.
Perfetto. E' proprio quello che volevo ottenere. Il trucco di aggiungere 
"Min(Eta) AS MinDiEta" mi consente di effettuare in GROUP per Nome e 
Cognome; il terzo campo viene comunque restituito ed è quello che desideravo 
io.
Grazie infinite.
AlpVir