13. august 2007 - 15:35Der er
9 kommentarer og 2 løsninger
Tælle om der er identiske i hver kolonne
Jeg har en tabel som indeholder fornavn, mellemnavn, efternavn, som 6 kolonner yderligere hvor 1 kolonne indeholder (LEFT(Fornavn, 1) + left(Mellemnavn, 1) + left(Efternavn, 2)) AS Login1 og næste kolonne (LEFT(Fornavn, 1) + left(Mellemnavn, 1) + Efternavn) AS Login2 osv. op til kolonne 6.
Det jeg så har behov for er at tjekke om der i nogen af de kolonner er nogle der er identiske (per kolonne). Det har jeg prøvet at løse med en count, men der hvor der så er identiske, bliver min count talt sammen for hver kolonne, så jeg har behov for at vide hvordan jeg ellers løser denne her.
Den forstod jeg næsten ikke. Du har en tabel med tre felter (kolonner) med personens navn og så har du 6 kolonner der indeholder hvad? Mulige logins?
Jeg tror det er smartere at lave nogle relationer mellem medarbejderen og de mulige logins. På den måde kan du forhindre at der genereres enslydende logins ved et simpelt unikt indeks.
Noget i retning af dette: Medarb-tabellen: Id (pri), Fornavn, Mellemnavne, Efternavn Logins: Medarb_Id, Login (unikt indeks på login)
Hvis altså du har muligheden for at rette din database...
Hvis ikke kan løsningen være at lave en dummy-tabel der indeholder alle de registrerede logins. Når du genererer dem kan du samtidigt indsætte i den - og derved få fejl ved sammenfald.
Endelig, hvis det er muligt, kan du hente alle logins op i hukommelsen - i dit program - og validere der, før du laver din "insert".
Du kunne måske lave et script der validerer på alle felter
select ID from medarb where (logincandidate = login1) or (logincandidate = login2) ... men den er ikke køn og dækker og et lidt uheldigt design (syns' jeg).
Jeg har genereret de mulige logins for at simulere hvilket standard, der vil bedste at bruge Om det skal være første bogstav i fornavn + efternavn, eller først bogstav i fornavn + de 2 først bogstaver i efternavn osv. det har jeg simuleret op til 7 forskellige kombinationer. og her vil jeg så tælle op per login simulering , dvs login1 , eksisterer der dubletter, og login2 eksisterer der dubletter osv. men laver jeg en select count(login1), count(login2) osv. , her går det så galt, jeg får det samme antal i login2 som i login1 selvom der ikke eksisterer dubletter i login2
Det skal siges at jeg har taget fornavn, mellenavn, efternavn, fra vores medarbejder kartotek og smidt over i en nyt table og sidder her og laver simluering, det er til overblik over hvad som ville være bedst at gå efter, da der skal integreres med nye udenlandske afdelinger og staben vokser stødt.
OK, det andet lød også lidt underligt. Behøver du så overhovedet den test i databasen? Var det ikke bedre at hente alle navnene ind i en liste i et program og eksperimentere med dem der? Jeg ville i alt fald hurtigere kunne bikse noget sammen på den måde end at kæmpe med data i en database.
Har du også adgang til de udenlandske medarbejdere? Ellers er dine testdata ikke særlig brugbare.
Har du prøvet dette? select count(login1), login1 from medarb group by login1 select count(login2), login2 from medarb group by login2 select count(login3), login3 from medarb group by login3 select count(login4), login4 from medarb group by login4 select count(login5), login5 from medarb group by login5 select count(login6), login6 from medarb group by login6
For mig virkede det hurtigere at lave det via SQL, men det nok fordi jeg ikke er så stærk i lige at kode det i et program.(kan godt men tager mig lidt længere tid)
Men det rigtigt din SQL giver mig korrekte count, men det må vel være muligt at kunne gøre det i en select.
(SELECT 'login1',login1,COUNT(*) AS dupl FROM medarb GROUP BY login1 HAVING dupl > 1) UNION (SELECT 'login2',login2,COUNT(*) AS dupl FROM medarb GROUP BY login2 HAVING dupl > 1) UNION ... UNION (SELECT 'login7',login7,COUNT(*) AS dupl FROM medarb GROUP BY login7 HAVING dupl > 1)
Ja det var ikke løsningen pt. men jeg smed det over i excel istedet og brugte en funktion og den nye office har mange nye gode godter men når jeg får lidt tid skriver jeg nok en lille program istedet, men i kom begge med gode forslag, så hvad siger i til at dele.
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.