Avatar billede leasing Nybegynder
21. marts 2003 - 09:56 Der er 26 kommentarer og
2 løsninger

Plus felter i database

Jeg laver et udtræk fra en database som giver mig eksempelvis disse tal:
5
10
-150
-50

Kan man i SQLsætningen lave et ekstra felt som summere tallene som den finder dem - altså således:
  5      5
  10    15
-150  -135
-50  -185
 
Håber der er en der ved hvordan sådan en skal laves.
Avatar billede sjap Praktikant
21. marts 2003 - 10:01 #1
Avatar billede sjap Praktikant
21. marts 2003 - 10:09 #2
Der findes desuden en alternativ metode her:

http://support.microsoft.com/default.aspx?scid=kb;EN-US;208714
Avatar billede leasing Nybegynder
21. marts 2003 - 10:44 #3
Jeg en tabel "POINTS" med point fordelt på en masse hold.
Når jeg nu får de tal frem som eks. har en holdID=137 så får jeg en DSum på alle de point der står i tabellen pointdatabasen. Dvs. der står:
  5    1552
  10    1552
-150    1552
- 50    1552

Hvad gør jeg lige forkert. Min SQL ser således ud:

SELECT holdspillere.holdID, Sum(points.point) AS SumOfpoint, points.rundeNr, DSum("[points.point]","POINTS") AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerID = points.spillerID
GROUP BY holdspillere.holdID, points.rundeNr
HAVING (((holdspillere.holdID)=137))
ORDER BY points.rundeNr;
Avatar billede mortrr Praktikant
21. marts 2003 - 10:51 #4
Din DSum laver en sammentælling på alle point, da den ikke har et kriterie.
Det bliver vist:
DSum("[points.point]","POINTS","holdid=" +holdspillere.holdid)
Men der det samme som du har i sum(points.point), så ...
Avatar billede sjap Praktikant
21. marts 2003 - 10:51 #5
Prøv at erstatte dsummen med nedestående:

DSum("[Point]","POINTS","[HoldId]=" & HoldId & " And [RundeNr]<=" & RundeNr)
Avatar billede leasing Nybegynder
21. marts 2003 - 11:00 #6
Når jeg kører SQL´en så kommer der ikke tal i DSum:

SELECT holdspillere.holdID, Sum(points.point) AS SumOfpoint, points.rundeNr, DSum("[Point]","POINTS","[HoldId]=137 And [RundeNr]=" & [RundeNr]) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerID = points.spillerID
GROUP BY holdspillere.holdID, points.rundeNr
HAVING (((holdspillere.holdID)=137));
Avatar billede sjap Praktikant
21. marts 2003 - 11:04 #7
Bare et gæt: Prøv at skrive <= foran RundeNr i DSUM sætningen
Avatar billede leasing Nybegynder
21. marts 2003 - 11:05 #8
virker heller ikke
Avatar billede sjap Praktikant
21. marts 2003 - 11:09 #9
Er det fordi feltet "HoldId" ikke findes i tabellen "Points". Så må du lige finde et andet felt at begrænse opslaget med.

Jeg er desværre optaget den næste times tid. Måske kan en anden hjælpe, ellers kigger jeg forbi, når jeg kommer tilbage.
Avatar billede leasing Nybegynder
21. marts 2003 - 11:15 #10
Jeg tror det er der problemet er begravet.
Jeg har to Tabeller:
HOLDSPILLERE: holdID, spillerID
POINT: autonum, spillerID, rundenr, point, dato

Jeg har lige lavet en forespørgsel hvor jeg laver en DSum på spillerID og den virker fint. Der må være en måde at lave den på.
Avatar billede mortrr Praktikant
21. marts 2003 - 11:33 #11
SELECT holdspillere.Holdid, Sum(points.point) AS SumOfpoint, points.rundenr, (select sum(Point) from points P1 inner join holdspillere HS1 ON P1.spillerID=HS1.spillerID  where p1.rundenr<=points.rundenr and HS1.holdID=holdspillere.holdid) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerid = points.spillerid
GROUP BY holdspillere.Holdid, points.rundenr
ORDER BY points.rundenr;

DSum er skiftet ud med en sub-select.
Ellers skal du lave et view som indeholder holdspillere og points, og bruge dsum overfor den.

For et hold bliver det:
SELECT holdspillere.Holdid, Sum(points.point) AS SumOfpoint, points.rundenr, (select sum(Point) from points P1 inner join holdspillere HS1 ON P1.spillerID=HS1.spillerID  where p1.rundenr<=points.rundenr and HS1.holdID=holdspillere.holdid) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerid = points.spillerid
WHERE HoldID=137
GROUP BY holdspillere.Holdid, points.rundenr
ORDER BY points.rundenr;
Avatar billede leasing Nybegynder
21. marts 2003 - 11:55 #12
Min SQL-sætning virker i Access, men når jeg putter den over i ASP så kommer der fejl. SQLsætning:

SQL3 = "SELECT TOP 1 points.spillerID, points.rundeNr, points.point, Abs(DSum("[Point]","POINTS","[spillerID]=382 And [RundeNr]<=" & [RundeNr])) AS PointTotal " & _
    "FROM points GROUP BY points.spillerID, points.rundeNr, points.point HAVING (((points.spillerID)=382)) " & _
    "ORDER BY Abs(DSum("[Point]","POINTS","[spillerID]=382 And [RundeNr]<=" & [RundeNr])) DESC;"

Fejlmeddelse:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0401)
Slut på sætning var ventet
/test1/www/sl/se_spillerinfo.asp, line 58, column 79
Det er anførselstegnene den brokker sig over...hvad skal jeg gøre???
Avatar billede mortrr Praktikant
21. marts 2003 - 12:06 #13
Du har rod i dine citations-tegn

Det bliver vist:
SQL3 = "SELECT TOP 1 points.spillerID, points.rundeNr, points.point, Abs(DSum('[Point]','POINTS','[spillerID]=382 And [RundeNr]<=' & [RundeNr])) AS PointTotal " & _
    "FROM points GROUP BY points.spillerID, points.rundeNr, points.point HAVING (((points.spillerID)=382)) " & _
    "ORDER BY Abs(DSum('[Point]','POINTS','[spillerID]=382 And [RundeNr]<=' & [RundeNr])) DESC;"
Avatar billede leasing Nybegynder
21. marts 2003 - 12:23 #14
mortrr> kanon...tak for det, så virker DSum på spillerID, men har stadig problem med min holdID.
TIl holdID ser min SQL sådan ud:

SELECT holdspillere.holdID, Sum(points.point) AS SumOfpoint, points.rundeNr, DSum("[Point]","POINTS","[HoldId]=137 And [RundeNr]<=" & [RundeNr]) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerID = points.spillerID
GROUP BY holdspillere.holdID, points.rundeNr
HAVING (((holdspillere.holdID)=137));

Der bliver brugt disse tabeller:
HOLDSPILLERE: holdID, spillerID
POINT: autonum, spillerID, rundenr, point, dato

Har du nogle guldkorn du kan ryste ud af ærmet ;-)
Avatar billede mortrr Praktikant
21. marts 2003 - 12:43 #15
Kig på den fra 21/03-2003 11:33:27

Du kan ikke bruge DSum med udvælgelse udfra et felt der ikke er i din hovedforespørgsel (spillerID), så du er nødt til at lave den som en sub-select, eller oprette et view som indeholder felterne fra holdspillere og point.
Avatar billede leasing Nybegynder
21. marts 2003 - 13:05 #16
Hvordan skal jeg bruge DSum overfor din sidst nævnte SQLsætning i 21/03-2003 11:33:27??
Avatar billede mortrr Praktikant
21. marts 2003 - 13:30 #17
Du skal ikke bruge dsum.
Den har en (select...) i stedet for dsum
Avatar billede mortrr Praktikant
21. marts 2003 - 13:31 #18
Den svarer til det du skrev i 21/03-2003 11:00:59
Avatar billede leasing Nybegynder
21. marts 2003 - 13:41 #19
okay, men når jeg bruger den sidste SQl fra 21/03-2003 11:33:27 så vises point fordelt på runder på det pågældende hold. Der laves jo ingen summering. Og det er den jeg skal bruge.
Avatar billede mortrr Praktikant
21. marts 2003 - 14:00 #20
Hvis du kun skal bruge summering på holdet, så forstår jeg ikke helt hvorfor du var ude efter en summering pr runde.

Sum pr hold er bare:
SELECT holdspillere.Holdid, Sum(points.point) AS SumOfpoint
FROM holdspillere INNER JOIN points ON holdspillere.spillerid = points.spillerid
GROUP BY holdspillere.Holdid;
Avatar billede mortrr Praktikant
21. marts 2003 - 14:01 #21
Den fra 11:33 viser
holdid, total point for hold, rundenr, point for holdet for runder <=aktuel runde
Avatar billede mortrr Praktikant
21. marts 2003 - 14:02 #22
Sludder:
holdid, total point for hold pr runde, rundenr, point for holdet for runder <=aktuel runde
Avatar billede leasing Nybegynder
21. marts 2003 - 14:06 #23
Denne SQL udregner jo bare Ialt point for dette hold.
Det som jeg skal bruger er som jeg skrev i indlægget at den summere:
  5      5
  10    15
-150  -135
-50  -185
Avatar billede mortrr Praktikant
21. marts 2003 - 14:26 #24
Og det svarer til den fra 11:33:27

SELECT holdspillere.Holdid, points.rundenr, Sum(points.point) AS SumOfpoint,  (select sum(Point) from points P1 inner join holdspillere HS1 ON P1.spillerID=HS1.spillerID  where p1.rundenr<=points.rundenr and HS1.holdID=holdspillere.holdid) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerid = points.spillerid
GROUP BY holdspillere.Holdid, points.rundenr
ORDER BY points.rundenr;

Jeg prøvede lige at lave et par tabeller som svarer til dine, og den returnerer faktisk det rigtige
Avatar billede mortrr Praktikant
21. marts 2003 - 14:27 #25
Hvis du vil have den for et hold så:
SELECT holdspillere.Holdid, points.rundenr, Sum(points.point) AS SumOfpoint,  (select sum(Point) from points P1 inner join holdspillere HS1 ON P1.spillerID=HS1.spillerID  where p1.rundenr<=points.rundenr and HS1.holdID=holdspillere.holdid) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerid = points.spillerid
GROUP BY holdspillere.Holdid, points.rundenr
WHERE HoldID=137
ORDER BY points.rundenr;
Avatar billede mortrr Praktikant
21. marts 2003 - 14:28 #26
og endnu en gang sludder.
Where skal selvfølgelig før group by, så:
SELECT holdspillere.Holdid, points.rundenr, Sum(points.point) AS SumOfpoint,  (select sum(Point) from points P1 inner join holdspillere HS1 ON P1.spillerID=HS1.spillerID  where p1.rundenr<=points.rundenr and HS1.holdID=holdspillere.holdid) AS PointTotal
FROM holdspillere INNER JOIN points ON holdspillere.spillerid = points.spillerid
WHERE HoldID=137
GROUP BY holdspillere.Holdid, points.rundenr
ORDER BY points.rundenr;
Avatar billede leasing Nybegynder
21. marts 2003 - 14:37 #27
mortrr> lav lige et svar...for du rykker da for vildt.
Tusind tak skal du have...du har simpelt reddet min dag.
Havde ikke set at der var en PointTotal (det er jo det sorte der er bogstaverne).
Avatar billede mortrr Praktikant
21. marts 2003 - 14:39 #28
OK.
Husk at give nogen til superjap også.
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