21. august 2005 - 09:15Der 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.
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
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 !!
Synes godt om
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.
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!
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;
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.
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;
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;
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?
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;
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
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.