webForumDet fria alternativet

Dublett-problem!

5 svar · 475 visningar · startad av Troxy

TroxyMedlem sedan mars 20041 505 inlägg
#1

Hallå, jag har problem med dubletter i en tabell.
Det känns som ett så simpelt problem, men jag lyckas inte lösa det.
Använder SQL Server 2000.
Jag har en fet tabell med massor av kunder i, där det bla. finns personnummer, namn, adress, telefon mm.

Det finns dubbletter, dvs. samma personnummer förekommer ibland två eller tre gånger.
Jag vill göra en SELECT på alla kunder men bara få ut dom EN gång.
DISTINCT fungerar inte i detta fall eftersom andra fält kan skilja sig en aning.
Så det är personnumret man måste gå på.

Hur ska jag lösa detta?
Står helt still i huvudet. x(
Tacksam för svar! :)

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Om samma person existerar på flera rader, vilken av dessa vill du då ha? Det är vad du måste bestämma. Princip:

select [red]field1
     , field2
     , ...
     , fieldn[/red]
  from t
group
    by [red]field1
     , field2
     , ...
     , fieldn[/red]
TroxyMedlem sedan mars 20041 505 inlägg
#3

Det spelar ingen roll vilken person som väljs, eftersom det är samma person.

Gruppring löser tyvärr inte problemet.
Jag vill ju hämta gatuadress, postnr och allt sånt.
Då måste jag även gruppera på dessa fält.
Men oftast så är fälten inte exakt lika ifyllda, det kan skilja lite mellanrum, vara stavfel.

TroxyMedlem sedan mars 20041 505 inlägg
#4

Finns det ingen smidig lösning?
Här är ett förenklat exempel:

persnr      förnamn     efternamn     adress
-------------------------------------------------
9090909090  sven        svensson      grönvägen 1
[red][B]9090909090  sven        svensson      grönv 1[/B][/red]
8080808080  anders      andersson     storgatan 2
[red][B]8080808080  anders      andersson     storg.2[/B][/red]

Hur gör jag en Select som skippar dom feta raderna?
(eller egentligen spelar det ingen roll vilka rader som skippas, så länge personnumret förekommer EN gång)

LarsGMedlem sedan dec. 200012 464 inlägg
#5
select persnr,förnamn,efternamn,adress
  from t as q
 where adress in 
    (select max(adress) 
       from t
      where t.persnr = q.persnr)
TroxyMedlem sedan mars 20041 505 inlägg
#6

Tack så mycket, ska testa direkt.
Men tyvärr så misstänker jag att det inte är en hållbar lösning eftersom adressen ibland är lika.

EDIT:
Jag byggde om din lösning lite LarsG, och fick en som fungerade!
Genom att använda fältet ID istället för Adress så fungerar det, eftersom ID alltid är unikt!

select persnr,förnamn,efternamn,adress
  from t as q
 where id in 
    (select max(id) 
       from t
      where t.persnr = q.persnr)
129 ms totalt · 3 externa anrop · v20260731065814-full.b943c234
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)