2 messaggi dal 10 marzo 2009
Salve,
ho una tabella strutturata più o meno in questo modo:

Codice Fiscale | Cognome | Nome | Indirizzo |

In questa tabella però, ci sono tanti codici fiscali doppi. Io devo prendere il codice fiscale una sola volta, e questo lo so fare con una semplice distinct, però poi ho bisogno di associare al CF anche gli altri dati: cognome, nome e indirizzo. Come posso fare?

Grazie

Alessandro
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Puoi utilizzare sia la DISTINCT che la GROUP BY come nell'esempio che segue

SELECT CodiceFiscale, Cognome, Nome, Indirizzo
FROM tabella
GROUP BY Codice Fiscale, Cognome, Nome, Indirizzo

oppure

SELECT DISTINCT CodiceFiscale, Cognome, Nome, Indirizzo
FROM tabella

E' evidente che se ci sono dei codici fiscali duplicati ci saranno anche dei nomi, cognomi e indirizzi correlati a ciascuno dei codici fiscali duplicati. Se anche gli altri attributi sono esattamente uguali non ci saranno altri errori (quello di fondo rimane il fatto che una struttura dati simile grida vendetta). Se invece ci sono per un dato CF degli attributi discordanti (ad esempio indirizzo diverso) dovrai preoccuparti di bonificare la situazione eliminando o rettificando i duplicati che ti verranno restituiti o, almeno, definendo un criterio logico sul PERCHE' in caso di record duplicati deve essere restituito un record piuttosto che un altro

Bye
2 messaggi dal 10 marzo 2009
Luca innanzitutto grazie per la risposta.
Il problema è che io a quella soluzione ci ero arrivato da solo. Ma non è soddisfacente perchè mi dà più risultati di quelli che dovrebbero essere. Io, facendo la distinct sul solo CF, ottengo 5514 record, con la tua query ne ottengo 6397.
Ti chiedo, non c'è nessun altro modo per ottenere i dati che mi servono?
E poi ti spiego meglio una cosa. Io questi dati li ottengo unendo varie tabelle che contengono sempre gli stessi campi (cf, cognome, etc.). Il problema è che in queste tabelle è possibile che sia presente anche lo stesso soggetto, e non per forza con cognome uguali (ad esempio con apostrofo al posto di accento), o con indirizzo diverso (presenza o mancanza di numero civico). Avendo le tabelle separate, posso unirle in un'unica facendo sì che mi prenda un soggetto una volta sola?

Grazie

Alessandro
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Come ti ho detto nel post precedente... devi definire "un criterio logico sul PERCHE' in caso di record duplicati deve essere restituito un record piuttosto che un altro".
Se il caso è che ad esempio ci sono De Rossi e DeRossi, Marchi e Marchì, Via Roma n.11 e Via Roma 11 è indispensabile procedere ad una bonifica dei dati che non può essere fatta via T-SQL se non sei in grado di conoscere a priori le possibili variazioni. Sarebbe facile ad esempio bonificare De Rossi e DeRossi ma più complesso, ad esempio, per

Via Giuseppe Garibaldi 120 a
Via G. Garibaldi n. 120/a
Via Garibaldi, 120a
Via Giuseppe Garibaldi 120
eccetera

In questi casi potrebbe venirti in aiuto l'operatore FUZZY GROUPING disponibile con SQL Server Integration Services. Fai riferimento a questo articolo per una overview

http://msdn.microsoft.com/en-us/library/ms345128(SQL.90).aspx

Bye
4 messaggi dal 14 marzo 2011
Ho lo stesso identico problema si può risolvere all'interno di una vista in sql server? come fare grazie?
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
al di la' delle corrette risposte di Luca, forse e' meglio che identifichi e spieghi meglio la tua problematica, diversamente le risposte di Luca sono perfette
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

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.