Avatar billede fennec Nybegynder
24. januar 2006 - 13:24 Der er 3 kommentarer og
1 løsning

to sum() funktioner på forskellige tabeller

Jeg har en database hvor jeg gerne skulle trække et par sum ud fra.

Dette er hvad jeg har laver i øjeblikket:

SELECT    p.ID, p.Name, SUM(pt.hours * pt.salery) AS timeTot, SUM(fal.total) AS fakTotal
FROM        Projects p LEFT OUTER JOIN
                      TIME_PROJECTTIME pt ON pt.caseid = p.ID LEFT OUTER JOIN
                      TIME_NewFaktura fa ON fa.caseID = p.ID LEFT OUTER JOIN
                      TIME_NewFakturaLine fal ON fal.FakturaID = fa.id
WHERE 
GROUP BY p.ID, p.Name

Hvilket giver mig resultatet:
141, "Projekt1", 2575.5, 11418.75

Men det skulle være:
141, "Projekt1", 858.5, 1268.75

timeTot er altså 3 gange for stor og fakTotal er 9 gange for stor. Det lader til at have noget med joinen at gøre for jeg har 3 rækker i TIME_NewFakturaLine og 9 rækker i TIME_PROJECTTIME. Tilføjer jeg en række på en af tabellerne bliver den modsvarende sum tilsvarende større.

Hele problemet opstår fordi jeg skal ind og hente sum fra TIME_NewFakturaLine som er joinet gennem TIME_NewFaktura. Er begge sum() hentet fra tabeller direkte knyttet til Projects virker det fint.

Er der nogen der har en løsning på det?? Må meget gerne virke i MS SQL også, men er ikke et krav.
Avatar billede fennec Nybegynder
24. januar 2006 - 13:41 #1
Det har vist sig at det heller ikke dur selv om tabellerne er joinet direkte på Projects. Der var nemlig kun et resultat da jeg testede det, så det passede. Nu er der flere rækker også passe det med at resultatet er x antalgange for stort :(
Avatar billede tjp Mester
24. januar 2006 - 15:44 #2
Det ville være nemmere, hvis du lige kort fortalte, hvad du vil opnå med din forespørgsel.
Avatar billede fennec Nybegynder
24. januar 2006 - 15:53 #3
Jeg vil bare udtrække alle projekter samt den total pris (består af hours*salery) samt det totale faktureret. Et eks på data kan være:

Projects
(id, name)
1, project1

[TIME_PROJECTTIME]
(id, caseid, hours, salery)
1, 1, 2, 250
2, 1, 3, 250
3, 1, 3, 300

TIME_NewFaktura
(id, caseID)
1, 1

TIME_NewFakturaLine
(id, fakturaID, lineTxt, total)
1, 1, linje 1, 300
2, 1, linje 2, 350
3, 1, linje 3, 250
Avatar billede fennec Nybegynder
10. februar 2006 - 10:58 #4
Jeg har bidt i det sure æble, og lavet det med flere selects.
.o) <-- One Eyed Jack
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