Avatar billede somaliomar Praktikant
19. september 2002 - 20:14 Der er 15 kommentarer og
2 løsninger

Top 10 målscorere... Del 2. Sorteringsrækkefølge

Se evt. del 1 http://www.eksperten.dk/spm/258592

På en rapport lister jeg top 10 poster udfra hver måltype. Det går fint, så længe der er mere end 10 poster for den enkelte måltype. Men hvis der findes mindre end 10 poster, lister den kun de poster, den kan finde og hopper til den næste måltype. Spørgsmålet er så om man kan lave sådan at lige meget om den finder top 10 poster eller ej, så lister den 10 poster.

Eksempel:


Fod - Top 10
ID    Navn    Scoringer    Måltype
1.    ...    ......      ......
2.    ...    ......      ......
.      ...    ......      ......  <- Der er kun fundet 7 poster
.      ...    ......      ......
7.    ...    ......      ......
8.
9.
10.

Hoved - Top 10
Nr    Navn    Scoringer    Måltype
1.    ...    ......      ......
2.    ...    ......      ......
.      ...    ......      ......
.      ...    ......      ......
7.    ...    ......      ......  <- Der er fundet =< 10 poster
8.    ...    ......      ......
9.    ...    ......      ......
10.    ...    ......      ......

Hånd - Top 10
Nr    Navn    Scoringer    Måltype
1.    ...    ......      ......
2.    ...    ......      ......  <- Der er fundet 2 poster
.
.
7.
8.
9.
10.

Øre - Top 10
Nr    Navn    Scoringer    Måltype
1.    ...    ......      ......
2.    ...    ......      ......
.      ...    ......      ......
.      ...    ......      ......
7.    ...    ......      ......  <- Der er fundet =< 10 poster
8.    ...    ......      ......
9.    ...    ......      ......
10.    ...    ......      ......

Et andet problem er sortering. Jeg vil gerne ændre sorteringsrækkefølgen i de fire måltyper sådan at måltype Øre kommer først og de tre andre derefter. Kan det lade sige gøre?

Jeg håber, at overstående er forståligt.
Avatar billede mugs Novice
19. september 2002 - 20:56 #1
M.h.t sortering, kan du i rapportens Designvisning ændre sortering til faldende på feltet Måltype, således at "Øre" kommer først. Det hjælper dog ikke, hvis du tilføjer en måltype hvis begyndelsesbogstav er "Å".
Avatar billede terry Ekspert
19. september 2002 - 21:06 #2
hi again Omar! Well I would think it possible but off the top of my head I am not sure how :o(

There is actually another problem which you havent hit yet!

The Top 10 returns MORE than 10 records IF there are records with the same score. For example if the top score was 20 and 15 had this score then 15 would be returned. This is the case in Access 97, it may have changed in 2000+XP.
Avatar billede somaliomar Praktikant
19. september 2002 - 21:31 #3
mugs >> Det jeg vil have er, at sortering skal være sådan her:
Øre
Fod
Hoved
Hånd
Avatar billede somaliomar Praktikant
19. september 2002 - 21:37 #4
terry >> What is in your mind? Please paste it here. It can maybe useful to me. I hope the problem you mention is gone with Access 2000!
Avatar billede mugs Novice
19. september 2002 - 21:41 #5
Du kan sortere stigende eller faldende og forskellig i forespørgslen og rapporten. Men jeg tror ikke du kan sortere som du ønsker uden:

- At programmere dig ud af det (og jeg ved ikke hvordan)
- Eller at lave underrapporter med postkilde i hver sin Top10 forespørgsel
Avatar billede terry Ekspert
19. september 2002 - 21:51 #6
Sorry Omar, my mind is blank. If I do hit on to something then I will get back.
Avatar billede lasse_buck Nybegynder
20. september 2002 - 13:13 #7
Vi laver 4 forespørgsler:
OrereTop10
FodTop10
HovedTop10
HaandTop10.
(Disse forespørgsler indeholder alle felter, som skal med i rapporten, og rækkerne skal være sorteret i den rigtige rækkefølge.)

FinalTop10:
SELECT * from OrereTop10 UNION FodTop10 UNION HovedTop10 UNION HaandTop10;

Hvis vi nu bygger vores rapport med FinalTop10 som som source og undlader at have sortering i rapporten, får vi så ikke den ønskede sortering (øre,fod,hoved,hånd)?
Avatar billede terry Ekspert
20. september 2002 - 13:20 #8
Hi Lasse>I dont think sorting is the problem! As far as I understand it, Omar wants to ALWAYS see 10 lines for each "type" even if there is NOT 10 records in that "type".
Avatar billede lasse_buck Nybegynder
20. september 2002 - 13:43 #9
terry > Det problem kommer jeg til senere ;o)
Men somaliomar har vist også et sorteringsproblem:
mugs >> Det jeg vil have er, at sortering skal være sådan her:
Øre
Fod
Hoved
Hånd
Avatar billede lasse_buck Nybegynder
20. september 2002 - 14:02 #10
Manglende rækker i top 10:
Jeg har starten på en ide. Det kræver nok jeres hjælp at komme helt i mål.

Jeg tager udgangspunkt i en sub-query FodTop10, for at fokusere på problemet med manglende rækker. Min ide bygger på, at vi har en tabel Dummy10, som indeholder 10 rækker. Alle felter er tomme undtagen feltet Nr, som er udfyldt med værdierne 1-10.

Hvis der er x rækker i FodTop10 og x + y = 10:
Kan det lade sig gøre at lave en intelligent join, som tager y rækker fra Dummy10 ???
Avatar billede lasse_buck Nybegynder
20. september 2002 - 14:08 #11
Hvis det kan lade sig gøre at generere et felt med løbenummer (rowid) i FodTop10, så kan man godt lave en intelligent join:

select * from FodTop10 UNION
select * from Dummy10 where nr not in (select nr from FodTop10).

Jeg ved godt det er komplekst, men håber i kan følge mig.

Hvordan får vi tilføjet et Nr (rowid) til dette output?
SELECT TOP 10 Målscorer.Navn, Målscorer.Måltype, Målscorer.Scoringer
FROM Målscorer
WHERE (((Målscorer.Måltype)="Fod"))
Avatar billede terry Ekspert
20. september 2002 - 14:12 #12
concerning sort>Well I may be wrong but I would g´have thoughit just a case of altering the query to select in the required order. There are 4 UNIT joins in the query where teh WHERE  needs to be altered to seelct in the correct order.
start with
WHERE (((Målscorer.Måltype)="Øre"))
and end with
WHERE (((Målscorer.Måltype)="Hånd"))


concerning manglende rækker.
I had also thought about making a temp table where the result from the query was appended (after deleting all records) and IF there were not 10 of each append a blank line. This line is going to have to contain an idea or something.
DCount could be used to check how many records there were then append in a loop until there were 10 of each.
Avatar billede somaliomar Praktikant
21. september 2002 - 10:26 #13
lasse_buck >> Ideen er ret god! Men jeg er bange for, at databasen bliver alt for kompliceret, hvis jeg anvender metoden. Jeg tænker på, at gribe det hele på en anden måde og bruge mugs' forslag om at programmere mig ud af problemerne.

Jeg vil oprette en rapport, hvor jeg indsætter 10 tomme tekstbokse for hver måltype. Derefter sætte en blok kode, der henter dataene fra top 10 forespørgslen, når rapporten åbnes. Dette vil løse de to problemer. Men så bliver koden jo fyldt med If- eller Case-sætninger, når jeg skal tjekke, hvilke data der hører til hvor! For at undgå dette vil jeg bruge løkker, men der lige et spørgsmål:

Jeg tænker på at give de forskellige tekstbokse de samme navn med et tal til sidst. Men hvordan var det, at man i koden kunne bestemme de forkellige tekstbokses navn dynamisk?

Me.txtNavn[variabel]

Jeg ved, at dette er muligt for jeg har set det blive brugt til en eller anden kode i Access. Jeg kan ikke bare huske, hvordan syntaksen skal være!

/Omar
Avatar billede somaliomar Praktikant
22. september 2002 - 08:27 #14
Er der ingen forslag?
Avatar billede somaliomar Praktikant
22. september 2002 - 09:58 #15
OK, jeg har fundet ud hvordan man dynamisk kan bestemme forskellige tekstbokses navn under runtime:

Me.Controls("txtNavn" & i) = !Navn

Jeg takker for jeres indsats!
Avatar billede lasse_buck Nybegynder
22. september 2002 - 23:52 #16
somaliomar >> Jeg har ikke været meget på nettet i weekenden, men det glæder mig, at du selv er kommet videre. En programmatisk løsning er ikke nogen dårlig ide. Det er sikkert mere overskueligt.

Tak for point.
Avatar billede terry Ekspert
23. september 2002 - 08:07 #17
Wasnt expecting any points here, but thanks anyway :o)
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