Avatar billede bobber Nybegynder
13. august 2007 - 15:35 Der 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.
Avatar billede hrc Mester
14. august 2007 - 09:07 #1
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)
Avatar billede hrc Mester
14. august 2007 - 09:14 #2
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).
Avatar billede bobber Nybegynder
14. august 2007 - 09:15 #3
Okey måske heller ikke bedst beskrevet.

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 burde være
login1, login2, login3
2,1,1

jeg får
login1, login2, login3
2,2,2

håber det gav en bedre forståelse.
Avatar billede bobber Nybegynder
14. august 2007 - 09:18 #4
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.
Avatar billede hrc Mester
14. august 2007 - 12:58 #5
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

Så mu du stykke listerne sammen bagefter
Avatar billede bobber Nybegynder
14. august 2007 - 13:19 #6
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.
Avatar billede arne_v Ekspert
15. august 2007 - 03:13 #7
(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)

måske
Avatar billede hrc Mester
15. august 2007 - 13:41 #8
Arne_v, Tænkte nok at du kom strygende ind fra siden med en brugbar kommentar... Alle dine points er velfortjente.
Avatar billede bobber Nybegynder
20. august 2007 - 11:12 #9
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.
Avatar billede arne_v Ekspert
20. august 2007 - 15:13 #10
helt ok
Avatar billede hrc Mester
20. august 2007 - 22:20 #11
ja, ja da. Så skidt
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
Computerworld tilbyder specialiserede kurser i database-management

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