Avatar billede leasing Nybegynder
21. august 2005 - 09:15 Der er 20 kommentarer og
1 løsning

Forespørgsel

Jeg skal have lavet en lidt kryptisk forespørgsel og har derfor brug for hjælp/inspiration til hvordan den skal laves.

Jeg har følgende tabeller:
POINTS: spillerID, rundenr, point, data
HOLDNAVNE: autoID, holdnavn, holdRundeNr
HOLDSPILLERE: autoID, spillerID, holdRundeNr, tilRundeNr
HOLDPULJE: autoID, puljeID

Min SQL ser således ud:
SELECT Sum(Points.point) AS AntPoint, HOLDPULJE.puljeID, holdnavne.autoID
FROM HOLDPULJE INNER JOIN ((holdnavne INNER JOIN holdspillere ON holdnavne.autoID = holdspillere.autoID) LEFT JOIN Points ON holdspillere.spillerID = Points.spillerID) ON HOLDPULJE.autoID = holdspillere.autoID
WHERE (((Points.rundeNr)>=[holdspillere].[holdrundenr] And (Points.rundeNr)<=[holdspillere].[tilrundenr]))
GROUP BY HOLDPULJE.puljeID, holdnavne.autoID, HOLDPULJE.puljeform
HAVING (((HOLDPULJE.puljeform)="firma"))
ORDER BY Sum(Points.point) DESC , HOLDPULJE.puljeID;

Denne giver mig jo så kun antal point for det enkelte hold. Det som er meningen er at få det samlede antal point for hver puljeID. Stillingen skal vises faldende.

Håber der er nogen derude der kan hjælpe. Hvis der mangler forklaring må I endelig sige til.
Avatar billede Slettet bruger
21. august 2005 - 10:56 #1
Jeg skal ikke gør mig for klog på det, men har et forelagt.

hvis du højreklikker, inde i forespørgsel, på det Felt:navn du ønsker samlet antalpoint og vælger Totaler. Så kommer Total:Grupper efter og ændre den til Total:Sum.

Håber det hjælper dig på vej !!
Avatar billede Slettet bruger
21. august 2005 - 12:05 #2
Jeg skal ikke gør mig for klog på det, men har et forelagt.

hvis du højreklikker, inde i forespørgsel, på det Felt:navn du ønsker samlet antalpoint og vælger Totaler. Så kommer Total:Grupper efter og ændre den til Total:Sum.

Håber det hjælper dig på vej !!
Avatar billede leasing Nybegynder
21. august 2005 - 13:32 #3
I min forspørgsel er der valgt TOTAL og SUM...se SQL SELECT Sum(Points.point) AS AntPoint.

Det summere point til hvert hold, men det skal summere for de hold der er i hver gruppe.

Det er der jeg har brug for hjælp.
Avatar billede Slettet bruger
21. august 2005 - 13:46 #4
En den felt som laver summerne ... kan du ikke i kriterier sætte

Like [puljeID]
Avatar billede leasing Nybegynder
21. august 2005 - 14:07 #5
Det kommer der ikke meget ud af. Forespørgsel viser intet resultat.
Avatar billede terry Ekspert
21. august 2005 - 18:47 #6
If you can send me your database with some test data then I will try and put something together for you. Otherwise I would have to make the tables/data myslef and I dont have time!

eksperten@NOSPAMsanthell.dk

remove NOSPAM
Avatar billede terry Ekspert
21. august 2005 - 18:48 #7
myslef = myself
Avatar billede leasing Nybegynder
21. august 2005 - 20:33 #8
Hej Terry

Jeg har sendt en email til dig med database. Håber du løser mit problem.
Avatar billede terry Ekspert
21. august 2005 - 20:37 #9
I'll take a look, and I hope I can help too :o)
Avatar billede terry Ekspert
21. august 2005 - 21:09 #10
If you want to see the total for each pulje then you can NOT group on autoID, doing this will give you the sum for each of these as you have seen! So you have to remove this from your grouping.

SELECT Sum(Points.point) AS AntPoint, HOLDPULJE.puljeID
FROM HOLDPULJE INNER JOIN ((holdnavne INNER JOIN holdspillere ON holdnavne.autoID = holdspillere.autoID) LEFT JOIN Points ON holdspillere.spillerID = Points.spillerID) ON HOLDPULJE.autoID = holdspillere.autoID
WHERE (((Points.rundeNr)>=[holdspillere].[holdrundenr] And (Points.rundeNr)<=[holdspillere].[tilrundenr]))
GROUP BY HOLDPULJE.puljeID, HOLDPULJE.puljeform
HAVING (((HOLDPULJE.puljeID)=76) AND ((HOLDPULJE.puljeform)="firma"))
ORDER BY Sum(Points.point) DESC , HOLDPULJE.puljeID;
Avatar billede terry Ekspert
21. august 2005 - 21:09 #11
this example is ONLY for puljeID = 76!!
Avatar billede leasing Nybegynder
21. august 2005 - 21:15 #12
Okay, men hvis jeg nu skal have vist alle puljer=firma listet i faldende orden hvordan skal jeg så gribe SQL´en an?
Dvs. puljeID=75 og puljeID=78 skal også vises på listen sammen med puljeID=76.
Avatar billede terry Ekspert
21. august 2005 - 21:18 #13
just remove 76 from the criteria

SELECT Sum(Points.point) AS AntPoint, HOLDPULJE.puljeID
FROM HOLDPULJE INNER JOIN ((holdnavne INNER JOIN holdspillere ON holdnavne.autoID = holdspillere.autoID) LEFT JOIN Points ON holdspillere.spillerID = Points.spillerID) ON HOLDPULJE.autoID = holdspillere.autoID
WHERE (((Points.rundeNr)>=[holdspillere].[holdrundenr] And (Points.rundeNr)<=[holdspillere].[tilrundenr]))
GROUP BY HOLDPULJE.puljeID, HOLDPULJE.puljeform
HAVING (((HOLDPULJE.puljeform)="firma"))
ORDER BY Sum(Points.point) DESC , HOLDPULJE.puljeID;
Avatar billede terry Ekspert
21. august 2005 - 21:31 #14
and actually you you dont need to group in puljeform


SELECT Sum(Points.point) AS AntPoint, HOLDPULJE.puljeID
FROM HOLDPULJE INNER JOIN ((holdnavne INNER JOIN holdspillere ON holdnavne.autoID = holdspillere.autoID) LEFT JOIN Points ON holdspillere.spillerID = Points.spillerID) ON HOLDPULJE.autoID = holdspillere.autoID
WHERE (((HOLDPULJE.puljeform)="firma") AND ((Points.rundeNr)>=[holdspillere].[holdrundenr] And (Points.rundeNr)<=[holdspillere].[tilrundenr]))
GROUP BY HOLDPULJE.puljeID
ORDER BY Sum(Points.point) DESC , HOLDPULJE.puljeID;
Avatar billede terry Ekspert
21. august 2005 - 22:17 #15
does this help?
Avatar billede leasing Nybegynder
22. august 2005 - 11:30 #16
terry> det virkede.
Mit næste problem bliver så, at den sum man kommer frem til for hver pulje, skal divideres med det antal hold der er i puljen. Herefter skal de igen sorteres faldende. Er det noget man kan gøre i samme SQL?
Avatar billede terry Ekspert
22. august 2005 - 13:10 #17
I would think that it is possible to do but I'm at work at the moment so I will take a look later.
Avatar billede terry Ekspert
22. august 2005 - 19:06 #18
SELECT Sum(Points.point) AS AntPoint, HOLDPULJE.puljeID, [AntPoint]/(SELECT count(*) FROM HOLDPULJE H WHERE H.puljeID = [HOLDPULJE]![puljeID]) AS PointAverage
FROM HOLDPULJE INNER JOIN ((holdnavne INNER JOIN holdspillere ON holdnavne.autoID = holdspillere.autoID) LEFT JOIN Points ON holdspillere.spillerID = Points.spillerID) ON HOLDPULJE.autoID = holdspillere.autoID
WHERE (((HOLDPULJE.puljeform)="firma") AND ((Points.rundeNr)>=[holdspillere].[holdrundenr] And (Points.rundeNr)<=[holdspillere].[tilrundenr]))
GROUP BY HOLDPULJE.puljeID
ORDER BY Sum(Points.point) DESC , HOLDPULJE.puljeID;
Avatar billede terry Ekspert
22. august 2005 - 19:10 #19
Access isnt very good at sorting on calculated fields, so it may be an idea to remove the ORDER BY and then makea new query where you select * and then sort by the PointAverage field
Avatar billede leasing Nybegynder
23. august 2005 - 13:16 #20
terry> det virker bare...tusind tak for hjælpen.
Avatar billede terry Ekspert
23. august 2005 - 15:41 #21
selv tak, glad to hear it works :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