Avatar billede Slettet bruger
17. juli 2007 - 16:51 Der er 5 kommentarer og
1 løsning

Dubletter i én tabel

Jeg har fået en tabel der er blevet lagt sammen af flere, problemet er at jeg har dubletter i denne tabel.

Der er ud over navn og email 13 felter med kategorier, i disse 13 felter kan der stå enten yes eller ikke noget.

Det jeg godt vil have gjort er at sammenligge de personer der er ens, jeg sammenligner ud fra emailadressen, har de samme email er det samme person.
Men personerne kan godt have forskellige yes angivelser i de forskellige kategorier.

Jeg vil gerne ende op med at der er én af hver person, men at de kategorierne bliver sammen lagt, så den ene person ender op med at have yes i alle de kategorier som alle dubletterne også havde.

Hvis person 1 og person 2 har samme email, men person har yes i kategori01 og kategori02, person har yes i kategori05 og kategori06.
Så vil jeg gerne ende op med person 1 som har yes i kategori01, kategori02, kategori05 og kategori06. og person 02 bliver så slettet fra databasen.

Kan nogen hjælpe mig med dette?
Avatar billede terry Ekspert
17. juli 2007 - 17:12 #1
it sounds as though you should normalise your database.

a table with person information, another table with different categories and then a link table which contains relationships between the two table and also a field containing yes/no
Avatar billede Slettet bruger
17. juli 2007 - 19:30 #2
Yeah I know, it isnt my db, im just helping out, I want to have it cleaned up before changing the layout.
Avatar billede terry Ekspert
17. juli 2007 - 19:38 #3
ther is no quick and easy way to "clean up" so I suggest that changing the layout at the same time will save work.
Avatar billede Slettet bruger
17. juli 2007 - 20:03 #4
Okay, and do you have any suggestions on doing that, so I dont have to do it manually?
Avatar billede terry Ekspert
18. juli 2007 - 08:40 #5
You will need to make the new tables and then make some queries which copies the data from the old table into the new. There is obvioulsy some manual work in designing the new tables and making the queries, but you wont need to cut and paste data between tables.

If you can make the new tables I can assist with making the new queries once I know the layoutof your tables.
Avatar billede Slettet bruger
18. juli 2007 - 09:20 #6
Du kan dele det op i en forespørgsel pr. kategori...

Dvs. du laver 13 forespørgsler a'la:
SELECT PersonTabel.email, PersonTabel.kategori01
FROM PersonTabel
GROUP BY PersonTabel.email, PersonTabel.kategori01
HAVING (((PersonTabel.kategori01)=True));
osv.. en for hver kategori

Så laver du en som finder den første (eller sidste) person for hver email, a'la:
SELECT First(PersonTabel.Person) AS FirstOfPerson, PersonTabel.email
FROM PersonTabel
GROUP BY PersonTabel.email;

og så sætter du dem sammen, bare husk at du skal ikke have group by og du skal lave alle joints så de viser alle personer, men kun de kategorier, som har samme email. I mit forsøg, som havde 3 kategorier, kom det til at se sådan ud:
SELECT KatFirstPerson.FirstOfPerson AS Person, KatFirstPerson.email, Kat01.kategori01, Kat02.kategori02, Kat03.kategori03
FROM ((KatFirstPerson LEFT JOIN Kat01 ON KatFirstPerson.email = Kat01.email) LEFT JOIN Kat02 ON KatFirstPerson.email = Kat02.email) LEFT JOIN Kat03 ON KatFirstPerson.email = Kat03.email;

Du laver så en kopi af din tabel, sletter alle data og kopier disse data over i den. Så skulle du have det ønskede resultat!~)
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