2016-01-06 13 views
6

Attualmente sto cercando di ripulire un database di sottoscrittori di mail creato da un ex dipendente. Sono stato in grado di consolidare e risolvere la maggior parte dei problemi (principalmente duplicati), ma ho istanze di abbonati con record duplicati perché sono iscritti a più regioni. Quello che voglio fare è unire i record duplicati in 1.SQL come unire record simili in una singola riga dalla stessa tabella?

Qui è un vero e proprio esempio redatto di un record duplicato che mi piacerebbe unire:

id  first  last address truck machinery gl ne nw 
------------------------------------------------------------------------ 
1  Chuck  G.... 12 Lorem 1      1 
2  Chuck  G.... 12 Lorem   1      1 
3  Chuck  G.... 12 Lorem   1     1 

e mi piacerebbe di fondere la 2 in 1 atto, ed eliminare tutti i duplicati (alcuni avere fino a 9 duplicati) in questo modo:

id  first  last address truck machinery gl ne nw 
------------------------------------------------------------------------ 
1  Chuck  G.... 12 Lorem 1  1   1  1  1 
+0

Cosa succede se alcune righe contengono valori diversi nella stessa colonna, ad esempio macchinario = 1,2,3? Quale valore deve essere scelto? – krokodilko

+0

In questi casi, sarà sempre solo un '1' o NULL. Il suo scopo è semplicemente definire se si iscrivono o meno a quell'edizione. Quindi se esiste un '1' in quella colonna in qualsiasi punto delle righe duplicate, dovrebbe essere usato '1'. –

risposta

5

Usa Group By e Max/Min Aggregate

SELECT id, 
     first, 
     last, 
     address, 
     Max(truck)  AS truck, 
     Max(machinery) AS machinery, 
     Max(gl)  AS gl, 
     Max(ne)  AS ne, 
     Max(nw)  AS nw 
FROM yourtable 
GROUP BY id, 
      first, 
      last, 
      address 
+0

Brillante. Cosi 'semplice. Usando questo tipo di selezione sono riuscito a creare un nuovo elenco di abbonati senza duplicati e ho unito tutti i dati appropriati. –