Avatar billede triggy Nybegynder
06. juli 2006 - 12:09 Der er 10 kommentarer og
1 løsning

Kryptisk SQL

Jeg har en database, der skal gennemgåes for dubletter, og dobbelt-oprettede poster

Denne SQL virker, og tager alle posterne, hvor de 6 første i CPR forekommer mere end en gang.

SELECT Left([tbl_Elever]![CPRnr],6) AS CPR, tbl_Elever.Navn, tbl_Elever.Efternavn, tbl_Elever.Firma, tbl_Elever.Initialer, tbl_Elever.Mifarenr, tbl_Elever.BilledeTaget
FROM tbl_Elever
WHERE ((Left([tbl_Elever]![CPRnr],6)) in  (SELECT  Left([tbl_Elever]![CPRnr],6) As Tmp FROM tbl_Elever GROUP BY  Left([tbl_Elever]![CPRnr],6) Having Count(*)>1));

Den vil jeg så gerne have udviddet til kun at tage de poster, hvor de 3 første bogstaver i navnet er det samme, og jeg har prøvette denne her uden held.

SELECT Left([tbl_Elever]![CPRnr],6) AS CPR, tbl_Elever.Navn, tbl_Elever.Efternavn, tbl_Elever.Firma, tbl_Elever.Initialer, tbl_Elever.Mifarenr, tbl_Elever.BilledeTaget
FROM tbl_Elever
WHERE (((Left([tbl_Elever]![CPRnr],6)) in  (SELECT  Left([tbl_Elever]![CPRnr],6) As Tmp FROM tbl_Elever GROUP BY  Left([tbl_Elever]![CPRnr],6) Having Count(*)>1)) AND (((Left([tbl_Elever]![Navn],3)) in  (SELECT  Left([tbl_Elever]![Navn],3) As Tmp1 FROM tbl_Elever GROUP BY  Left([tbl_Elever]![Navn],3) Having Count(*)>1))));

Den returnere præcis den samme liste.

Hvad gør jeg forkert ?
Avatar billede terry Ekspert
06. juli 2006 - 14:47 #1
if you dont get a response here and you can send me your dB then I can maybe take a look later.

eksperten@santhell.dk

Please compact/zip the dB
Avatar billede jensen363 Forsker
10. juli 2006 - 09:07 #2
Din query er korrekt, og under forudsætning af, at Navn afviger på 4. karakter, returneres det korrekte antal poster ( testet )
Avatar billede triggy Nybegynder
10. juli 2006 - 11:42 #3
har lige testet det igen...
jeg får et resultat, der blandt andet returnerer to personer, som den mener er dubletter, fordi de har samme fødselsdato, men den ene hedder Marianne, og den anden Thomas, så det er ligesom den ikke tager højde for de 3 første bogstaver i navnet

Jeg skal lige se om jeg kan fjerne noget data i db'en, så jeg kan sende den...
Ellers må jeg lige lave en ny db, med nogle eksempler i
Avatar billede jensen363 Forsker
10. juli 2006 - 11:50 #4
Har du kun den ene tabel ???
Avatar billede terry Ekspert
10. juli 2006 - 11:50 #5
OK
Avatar billede triggy Nybegynder
10. juli 2006 - 12:11 #6
øøh. nej, der er et par andre tabeller, men det er kun til admin-login, og noget tids/zone styring. ikke noget relevant i denne sammenhæng
Avatar billede jensen363 Forsker
10. juli 2006 - 12:19 #7
Problemet ligger ikke i query, men sikkert i tabellen/tabelindholdet ... send bare den ene tabel til mig også ( zipped )

ose@post.dk
Avatar billede triggy Nybegynder
10. juli 2006 - 12:44 #8
har sendt db'en til jer begge to :)
Avatar billede triggy Nybegynder
10. juli 2006 - 13:50 #9
Terry. det virker perfekt.
smider du et svar ?

Til andre der kunne støde på samme problem:

qryDoubles:
SELECT Left([tbl_Elever]![CPRnr],6), Left([tbl_Elever]![Navn],3), Count(*) AS Cnt
FROM tbl_Elever
GROUP BY Left([tbl_Elever]![CPRnr],6), Left([tbl_Elever]![Navn],3)
HAVING (((Count(*))>1))
ORDER BY Count(*) DESC;

qryJoinFields:
SELECT tbl_Elever.Navn, tbl_Elever.Efternavn, tbl_Elever.Firma, tbl_Elever.Initialer, tbl_Elever.Mifarenr, tbl_Elever.BilledeTaget, Left([tbl_Elever]![CPRnr],6) AS CPR6, Left([tbl_Elever]![Navn],3) AS Navn3
FROM tbl_Elever;

qryResult:
SELECT qryJoinFields.CPR6, qryJoinFields.Navn3, qryJoinFields.Navn, qryJoinFields.Efternavn, qryJoinFields.Firma, qryJoinFields.Initialer, qryJoinFields.Mifarenr, qryJoinFields.BilledeTaget
FROM qryJoinFields INNER JOIN qryDoubles ON (qryJoinFields.Navn3 = qryDoubles.Expr1001) AND (qryJoinFields.CPR6 = qryDoubles.Expr1000)
WHERE (((qryDoubles.Cnt)>1))
ORDER BY qryJoinFields.CPR6, qryJoinFields.Navn3;
Avatar billede terry Ekspert
10. juli 2006 - 13:57 #10
:o)
Avatar billede terry Ekspert
10. juli 2006 - 13:58 #11
Little change to qryResult, no need fo rtest > 1 as it is in
qryDoubles


SELECT qryJoinFields.CPR6, qryJoinFields.Navn3, qryJoinFields.Navn, qryJoinFields.Efternavn, qryJoinFields.Firma, qryJoinFields.Initialer, qryJoinFields.Mifarenr, qryJoinFields.BilledeTaget
FROM qryJoinFields INNER JOIN qryDoubles ON (qryJoinFields.Navn3 = qryDoubles.Expr1001) AND (qryJoinFields.CPR6 = qryDoubles.Expr1000)
ORDER BY qryJoinFields.CPR6, qryJoinFields.Navn3;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester