06. juli 2006 - 12:09Der 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))));
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
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;
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;
Synes godt om
Ny brugerNybegynder
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.