Avatar billede -mundi- Nybegynder
12. juni 2002 - 20:28 Der er 10 kommentarer og
1 løsning

Tælle hvor mange gange værdier er i en tabel

Hej

Nu har jeg siddet og rodet lidt med et problem og har stirret mig blind på løsningen ...

Jeg har en tabel der ser nogen lunde sådan her ud

navn  vaerdi  antal
jim  1      0
hans  2      0
ole  3      0
jim  4      0
jim  5      0
kim  6      0
jens  7      0
kim  8      0

og den skulle gerne ende med at se sådan her ud:

jim  1      3
hans  2      1
ole  3      1
jim  4      3
jim  5      3
kim  6      2
jens  7      1
kim  8      2

dvs jeg vil gerne tælle hvor mange gange et navn står i databasen og så opdatere alle felterene i databasen med det antal

Det SKAL gøres i sql og der må gerne bruges temp tabeller hvis det er nødvendigt.. der er 130000 records i databasen så det kan ikke gøres med håndkraft

Avatar billede nih Novice
12. juni 2002 - 20:38 #1
lav en foresp Qantal:
SELECT Tabel1.navn, Count(Tabel1.navn) AS AntalOfnavn
FROM Tabel1
GROUP BY Tabel1.navn;

lav en foresp mere :
SELECT Tabel1.navn, Tabel1.værdi, qantal.AntalOfnavn
FROM Tabel1 INNER JOIN qantal ON Tabel1.navn = qantal.navn;

hvor tabel1 er dit tabelnavn
Avatar billede nih Novice
12. juni 2002 - 20:41 #2
Du behøver altså ikke feltet antal - den kommer i den sidste forespørgsl.
Avatar billede nih Novice
12. juni 2002 - 20:51 #3
Ellers den her:
UPDATE Tabel1 SET Tabel1.antal = DCount("navn","tabel1","navn = '" & tabel1!navn & "'");
Avatar billede -mundi- Nybegynder
12. juni 2002 - 20:51 #4
Jeg vil gerne have en update query :-) Kan du ikke bikse sådan en sammen ? Men jeg tester lige hvordan det virker først
Avatar billede -mundi- Nybegynder
12. juni 2002 - 21:01 #5
hmm den er pænt tung at køre den sidste update der :-) Det har nok noget at gøre med at
Avatar billede -mundi- Nybegynder
12. juni 2002 - 21:02 #6
oops ramte submit knappen ...

Det har nok noget at gøre med at der mangler en where clause ? :-)
Avatar billede nih Novice
12. juni 2002 - 21:08 #7
nej - det er funktionen dcount() der skal udføres 130000 gange.
det vil hjælpe med en temptabel, men så skal du sikre dig at den tømmes, hvergang din kode køres.
Avatar billede nih Novice
12. juni 2002 - 21:12 #8
Q1:
SELECT Tabel1.navn, Count(Tabel1.navn) AS AntalOfnavn
INTO tblTemp
FROM Tabel1
GROUP BY Tabel1.navn;

og derefter updater fra tblTemp:
Q2
UPDATE Tabel1 INNER JOIN tblTemp ON Tabel1.navn = tblTemp.navn SET Tabel1.antal = [antalofnavn];

men det kræver en hvis logik:
Slet temptabel
kør Q1
forespørg med Q2
Avatar billede -mundi- Nybegynder
12. juni 2002 - 21:12 #9
det skal kun køres en gang så jeg må bare væbne mig med tålmodighed så
Avatar billede nih Novice
12. juni 2002 - 21:16 #10
det sidste forslag er OK, du skal bare vide at man kan risikere at updatere med data der er for gamle. tblTemp kan være 'forældet'

Niels
Avatar billede -mundi- Nybegynder
12. juni 2002 - 21:17 #11
tak for hjælpen
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