12 messaggi dal 04 giugno 2001
Salve a tutti, da autodidatta di SQL ho un problema a creare una query. Qualcuno può aiutarmi?

Ho una tabella SQL contenete nome,cognome,rag_soc e altre informazioni SENZA NESSUNA CHIAVE (me la sono trovata cosi e ci devo lavorare sopra) contenete 1 o più righe per ogni persona (nome + cognome +rag_soc). Come posso ottenere una lista di duplicati da analizzare per potermi costruire una tabella PERSONE in modo corretto??

Grazie in anticipo,
Maczanna
71 messaggi dal 06 settembre 2002
Prova così:
select nome&cognome&rag_soc as unico, count(*) as totale from tabella group by nome&cognome&rag_soc
otterrai un elenco dove, accanto ad ogni campo di nome "unico", avrai un campo "totale" contenente le ricorrenze del campo "unico": se totale = 1, va bene così, se totale > 1, ci si trova in presenza di duplicati.
Puoi intervenire anche a livello di recordset, evitando di visualizzare il record quando totale = 1.
Ciao

Marco

http://www.mso.it/public/marco/index.asp

Ciao

Marco
12 messaggi dal 04 giugno 2001
Grazie del consiglio, funziona perfettamente. Già che ci sono, sai anche come posso creare un recordset con solo i duplicati? Mi spiego:
Supponiamo che io abbia

-Mario Rossi MiaAzienda
-Mario Rossi MiaAzienda
-Mario Rossi MiaAzienda
-Gianni Bianchi Mycompany
-Gianni Bianchi Mycompany
-Gianni Bianchi Mycompany
-Carlo Verdi altraAzienda

non so come creare un rs con solo Rossi (tutti e tre i record) e Bianchi (tutti e due i record).
Il tutto mi server per poter valutare tra tutti i rossi / bianchi gli altri campi della tabella.

Grazie per la collaborazione.
Alessandro
71 messaggi dal 06 settembre 2002
Select * from Tabella where cognome='Rossi' and nome='Mario'
estrae tutti e soltanto i "Rossi Mario"
Select * from Tabella where (cognome='Rossi' and nome='Mario') or (cognome='Bianchi' and nome='Gianni')
estrae tutti e soltanto i "Rossi Mario" e "Bianchi Gianni".


Ciao

Marco

http://www.mso.it/old-public/marco/index.asp

Ciao

Marco
74 messaggi dal 06 settembre 2002
visto che mi sono divertito a trovare la soluzione posto anche la mia .. magari da quanlche spunto!

soluzione1:
<i>select * from tabella1 as A where (select count(*) from tabella1 as b where a.pippo=b.pippo) &gt; 1</i>

soluzione2:
<i>SELECT Pippo FROM tabella1 AS A WHERE exists (select pippo, count(*) as totale from tabella1 as B where a.pippo=b.pippo group by pippo having count(*)&gt;1 ) ORDER BY pippo</i>

la prima e' certamente piu' performante anche perche' e' una sola query mentra la seconda sono due query incrociate!

naturalmente sono query generiche da adattare alle proprie esigenze .. ma ci ho eprso un dieci minuti in mezzo alle telefonate dei clienti e mi dispiaceva averla fatte ... come dire ... al vento!

Ciaps
Stracca ( www.stracca.net )
71 messaggi dal 06 settembre 2002
Bravo Stracca!
Mi sono divertito anch'io, perciò eccoti un'altra soluzione:
select * from tabella1 where pippo in (select pippo from tabella1 group by pippo having count(*)&gt;1)
P.S. anche la tua prima soluzione non è un'unica query, perché contiene una subselect.

Ciao

Marco

http://www.mso.it/old-public/marco/index.asp

Ciao

Marco
74 messaggi dal 06 settembre 2002
giusto .. e' che ne ho provate cosi' tante (prima le provavo su un sql AS/400 poi sono passato ad Alcess!) che ho scritto senza rileggere!
12 messaggi dal 04 giugno 2001
Grazie a tutti per il contributo.
Ora ho le idee un attimino più chiare.

Al prossimo quesito,
Alessandro

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.