Avatar billede trinerafn Nybegynder
20. januar 2005 - 14:53 Der er 9 kommentarer og
1 løsning

Problem m. Sum i Query bygget på en anden query

QryOrdersAndAdditions består af tblProjekt+tblTillæg, relateret i en en til mange relation. Joinen er: Include all records from tblProjekt and only those records from tblTillæg where the joined fields are equal.
Jeg har så en QryOrdersTotal, som bygger på QryOrdersAndAdditions. Hvordan får jeg QryOrdersTotal til kun at medtage totalen fra hvert projektnr én gang. Sådan ser QryOrdersTotal ud nu:
oprkontSUM: Sum([QryOrdersAndAdds]![TotaliDKK])
Men den tæller forkert. Den tæller projektnr linien med flere gange hvis der er flere tillæg. Kan man begrænse i criterie feltet i Queryen??
Avatar billede overchord Nybegynder
20. januar 2005 - 15:41 #1
Kan du evt vise SQL'en for din QryOrdersAndAdds.
Avatar billede trinerafn Nybegynder
20. januar 2005 - 15:47 #2
Ja hjertens gerne: Her er tblProjekt lig med TblOrdreMeddel (for forklarings skyld.)
SELECT DISTINCTROW TblOrdreMeddel.Projektnr, TblOrdreMeddel.Typenavn, TblOrdreMeddel.Ordredato, TblOrdreMeddel.KAD, TblOrdreMeddel.Faktureringsansvarlig, TblOrdreMeddel.Projektnavn, TblOrdreMeddel.Customer, TblOrdreMeddel.Godkendt, [TblOrdreMeddel].[OprinKontraktbeloeb1]*[Rate1] AS Total1, [TblOrdreMeddel].[OprinKontraktbeloeb2]*[Rate2] AS Total2, [TblOrdreMeddel].[OprinKontraktbeloeb3]*[Rate3] AS Total3, Nz([Total1])+Nz([Total2])+Nz([Total3]) AS TotaliDKK, TblOrdreMeddel.Omkostninger1, TblOrdreMeddel.Omkostninger2, TblOrdreMeddel.Omkostninger3, TblOrdreMeddel.DBEt1, TblOrdreMeddel.DBEt2, TblOrdreMeddel.DBEt3, TblOrdreMeddel.Timer1, TblOrdreMeddel.Timer2, TblOrdreMeddel.Timer3, TblOrdreMeddel.DBTo1, TblOrdreMeddel.DBTo2, TblOrdreMeddel.DBTo3, TblOrdreMeddel.TillaegsLinier, TblTillaeg.TillaegsLinie, TblTillaeg.ProjektnrLinie, TblTillaeg.[Tillæg nr], TblTillaeg.Tillaegsordredato, TblTillaeg.Tillaegsbeloeb, TblTillaeg.Tillaegsrate, TblTillaeg.Tillaegstotal, TblTillaeg.Tillaegsomkostninger, TblTillaeg.TillaegsDB1, TblTillaeg.Tillaegstimer, TblTillaeg.TillaegsDB2, TblTillaeg.Tillaegsgodkendt
FROM TblOrdreMeddel LEFT JOIN TblTillaeg ON TblOrdreMeddel.Projektnr = TblTillaeg.ProjektnrLinie
WHERE (((TblOrdreMeddel.Typenavn) Like ("*" & [Forms]![FrmOrdersSearch]![CmbTypevalg] & "*")) AND ((TblOrdreMeddel.Ordredato)>=([Forms]![FrmOrdersSearch]![TbFraDato]) And (TblOrdreMeddel.Ordredato)<=([Forms]![FrmOrdersSearch]![TbTilDato])) AND ((TblOrdreMeddel.KAD) Like ("*" & [Forms]![FrmOrdersSearch]![CmbKADsoeg] & "*")) AND ((TblOrdreMeddel.Faktureringsansvarlig) Like ("*" & [Forms]![FrmOrdersSearch]![TbResponsible] & "*")) AND ((TblOrdreMeddel.Customer) Like ("*" & [Forms]![FrmOrdersSearch]![CmbKundeSoeg] & "*")) AND ((TblOrdreMeddel.Godkendt) Like ("*" & [Forms]![FrmOrdersSearch]![CheckGodkendtOrdre] & "*")))
ORDER BY TblOrdreMeddel.Projektnr, TblTillaeg.[Tillæg nr];
Avatar billede overchord Nybegynder
20. januar 2005 - 17:17 #3
I din qryOrdersTotal skal du lave en gruppering paa projektnr. Selve oprkotoSUM er ok men det er sikkert grupperingen der mangler idet QryOrdersAndAds retunerer de individuelle poster for projektnummeret.

DVS noget i retning af
SELECT Projektnr, Sum(TotaliDKK) AS TotalDKK FROM qryordersandadds GROUP BY Projektnr.
Avatar billede trinerafn Nybegynder
21. januar 2005 - 12:57 #4
Det er nu afprøvet. Det virker ikke. Det virker sådan at der i min tekstbox så kun er talt op for det først forekommende projektnr. og ydermere hvis projektnr optræder flere gange, idet det evt. har flere tillæg lægges TotalDKK sammen flere gange, hvis der er flere tillæg, selvom det kun forekommer en gang pr projektnr.
Avatar billede trinerafn Nybegynder
21. januar 2005 - 15:26 #5
I ventetiden på at nogen vender tilbage, har jeg afprøvet DSum for at hente tallet fra en anden query, det fungerer med det rigtige tal men tallet kan ikke ændre sig idet det ikke kan "requeries", så det er heller ikke den rigtige løsning.
Avatar billede trinerafn Nybegynder
21. januar 2005 - 15:37 #6
Sql'en for QryOrdersTotal ser så stadig sådan ud:
SELECT DISTINCTROW Sum([QryOrdersAndAdds]![TotaliDKK]) AS oprind
FROM QryOrdersAndAdds;
Avatar billede kjulius Novice
23. januar 2005 - 01:16 #7
Som jeg ser det, så er dit problem, at du har for mange felter med i din QryOrdersAndAdds forespørgsel til at kunne basere QryOrdersTotal på den. QryOrdersAndAdds returnerer en row for hvert tillæg. Det kan tilføjelsen af DISTINCTROW ikke ændre på, for den fjerner kun dubletter (altså rows hvor alle felter er ens), men da tillægsfelterne er forskellige, er DISTINCTROW sandsynligvis helt uden virkning. Er det ikke rigtigt?

Det kan du sikkert hurtigt svare på :-)

Din QryOrdersTotal er en sum af TotaliDKK, som igen er en beregning på flere felter i TblOrdreMeddel, mens der i den beregning overhovedet ikke refereres til felter i TblTillaeg.

Jeg går ud fra, at grunden til at du vil basere QryOrdersTotal på QryOrdersAndAdds er, at du på den måde kan undgå at gentage de mange kriterier. Men da QryOrdersAndAdds grundet tilstædeværelsen af tillægsfelterne vil returnere en row pr. tillæg (der er jo ingen SUM på disse felter), ja så kan QryOrdersTotal bare ikke baseres på denne forespørgsel.

Det vil være langt lettere at medtage alle kriterierne og mellemregningerne igen og basere summen på tabellen alene. Noget lignende dette:

SELECT TblOrdreMeddel.Projektnr, SUM(Nz([TblOrdreMeddel].[OprinKontraktbeloeb1]*[Rate1]) + Nz([TblOrdreMeddel].[OprinKontraktbeloeb2]*[Rate2]) + Nz([TblOrdreMeddel].[OprinKontraktbeloeb3]*[Rate3])) AS TotaliDKK
FROM TblOrdreMeddel
WHERE (((TblOrdreMeddel.Typenavn) Like ("*" & [Forms]![FrmOrdersSearch]![CmbTypevalg] & "*")) AND ((TblOrdreMeddel.Ordredato)>=([Forms]![FrmOrdersSearch]![TbFraDato]) And (TblOrdreMeddel.Ordredato)<=([Forms]![FrmOrdersSearch]![TbTilDato])) AND ((TblOrdreMeddel.KAD) Like ("*" & [Forms]![FrmOrdersSearch]![CmbKADsoeg] & "*")) AND ((TblOrdreMeddel.Faktureringsansvarlig) Like ("*" & [Forms]![FrmOrdersSearch]![TbResponsible] & "*")) AND ((TblOrdreMeddel.Customer) Like ("*" & [Forms]![FrmOrdersSearch]![CmbKundeSoeg] & "*")) AND ((TblOrdreMeddel.Godkendt) Like ("*" & [Forms]![FrmOrdersSearch]![CheckGodkendtOrdre] & "*")))
GROUP BY TblOrdreMeddel.Projektnr
ORDER BY TblOrdreMeddel.Projektnr
Avatar billede trinerafn Nybegynder
23. januar 2005 - 18:04 #8
>Kjulius-Til dit første spørgsmål: Jo, det er fuldstændigt korrekt at DISTINCTROW er uden virkning, det var blot et tamt forsøg i min desperathed. Jeg er også kommet frem til at jeg kan se at man ikke kan tælle på queryen uden et kriterie, jeg havde nok håbet på at man i criterie feltet havde kunnet skrive noget som WHERE Projektnr=Projektnr sådan at man kun fik en forekomst for hvert projektnr. Jeg afprøver din løsning imorgen mandag, og vender tilbage. Mvh. Trine
Avatar billede trinerafn Nybegynder
24. januar 2005 - 08:10 #9
>Kjulius-vedr. du skriver at grunden til at basere QryOrdersTotal på QryOrdersAndAdds er at jeg kan undgå at gentage kriterier. Det er nu ikke derfor, det er fordi QryOrdersTotal skal kaldes fra en søgeform som både viser Projektnumre, samt deres eventuelle tillæg, og ja det kan godt være der ikke er nogen summer på tillæg endnu, men det skulle der gerne snart komme, det er jeg blot ikke nået til, det bliver næste problem. Derefter skal der en ny total for evt. projektnumre samt deres eventuelle tillæg.
Avatar billede trinerafn Nybegynder
25. januar 2005 - 13:52 #10
>kjulius - jeg kan nu se at du i dit løsningsforslag vil have at jeg kun baserer øverste Query på "moder"tabellen. Det kan jeg ikke bruge. Det må være muligt i criterie linien i Queryen, at filtrere de "uønskede" tillægslinier fra, måske med en WHERE eller en HAVING eller NOT IN. Jeg giver dig point og opretter et nyt spørgsmål
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

IT-JOB

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Teamleder til AL Sydbanks GDPR & Tech Regulation i Aabenraa

Politiets Efterretningstjeneste

AI/ML udvikler i PET

IT-Universitetet i København

CIO