Så här skapar du en löpande summeringsfråga i Microsoft Access
Anteckning
Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.
Avancerat: Kräver expertkodning, interoperabilitet och fleranvändarfärdigheter.
Den här artikeln gäller en Microsoft Access-databasfil (.mdb) eller en Microsoft Access-databasfil (.accdb).
Sammanfattning
I den här artikeln visas två metoder som du kan använda för att skapa en löpande summeringsfråga. En löpande summafråga är en fråga där summan för varje post är en summa av den posten och eventuella tidigare poster. Den här typen av fråga är användbar när du vill visa ackumulerade summor över en grupp med poster (eller över en tidsperiod) i ett diagram eller en rapport.
Obs! Du kan se en demonstration av den teknik som används i den här artikeln i exempelfilen Qrysmp00.exe.
Mer information
Metod 1
Den första metoden använder en DSumma-funktion och villkor i en fråga för att skapa en löpande summering över tid. Med funktionen DSumma summerar du den aktuella posten och eventuella tidigare poster. När frågan flyttas till nästa post körs funktionen DSumma igen och uppdaterar den kumulativa summan.
I följande exempelfråga används tabellen Order från exempeldatabasen Northwind för att skapa en löpande summering av fraktkostnaderna för varje månad 1997. Av prestandaskäl är exempeldata begränsade till ett år. Eftersom funktionen DSumma körs en gång för varje post i frågan kan det ta flera sekunder (beroende på datorns hastighet) innan frågan slutförs. Så här skapar och kör du frågan:
Öppna exempeldatabasen Northwind.
Skapa en ny urvalsfråga och lägg till tabellen Order.
Klicka på Summor på Visa-menyn.
Obs! I Access 2007 klickar du på Summor i gruppen Visa/dölj på fliken Design.
I den första kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Sortera och Visa:
Field: AYear: DatePart("yyyy",[OrderDate]) Total: Group By Sort: Ascending Show: YesUttrycket i rutan Fält visar och sorterar årsdelen av fältet Orderdatum.
I den andra kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Sortera och Visa:
Field: AMonth: DatePart("m",[OrderDate]) Total: Group By Sort: Ascending Show: YesUttrycket i rutan Fält sorterar och visar månadsdelen av fältet Orderdatum som ett heltalsvärde från 1 till 12.
I den tredje kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa och Visa.
OBS! I följande exempel används ett understreck (_) i slutet av en rad som ett rad fortsättningstecken. Ta bort understreck från slutet av raden när du skapar det här exemplet igen.
Field: RunTot: DSum("Freight","Orders","DatePart('m', _ [OrderDate])<=" & [AMonth] & " And DatePart('yyyy', _ [OrderDate])<=" & [AYear] & "") Total: Expression Show: YesUttrycket i rutan Fält använder funktionen DSumma() för att summera fältet Frakt när värdena i fälten AMonth och AYear är mindre än eller lika med den aktuella posten som frågan bearbetar.
I den fjärde kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Sortera och Visa:
Field: FDate: Format([OrderDate],"mmm") Total: Group By Sort: Ascending Show: YesUttrycket i rutan Fält visar varje månad i textformat, t.ex. jan, feb, mar och så vidare.
I den femte kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa, Villkor och Visa:
Field: DatePart("yyyy",[OrderDate]) Total: Where Criteria: 1997 Show: NoUttrycket i rutan Fält filtrerar frågans postuppsättning så att data från 1997 endast inkluderas.
Kör frågan. Observera att följande poster visas i RunTot-fältet med en löpande summering:
AYear AMonth RunTot FDate -------------------------------------- 1997 1 2238.98 Jan 1997 2 3840.43 Feb 1997 3 5729.24 Mar 1997 4 8668.34 Apr 1997 5 12129.74 May 1997 6 13982.39 Jun 1997 7 17729.29 Jul 1997 8 22204.73 Aug 1997 9 26565.26 Sep 1997 10 32031.38 Oct 1997 11 36192.09 Nov 1997 12 42748.64 Dec
Metod 2
Den andra metoden använder en summafråga med en DSumma()-funktion för att skapa en löpande summa över en grupp.
I följande exempelfråga används tabellen Order för att summera fraktkostnader per anställd samt för att beräkna en löpande fraktsumma. Så här skapar och kör du frågan:
Öppna exempeldatabasen Northwind.mdb.
Skapa en ny urvalsfråga och lägg till tabellen Order.
Klicka på Summor på menyn Visa.
Obs! I Access 2007 klickar du på Summor i gruppen Visa/dölj på fliken Design.
I den första kolumnen i frågerutnätet lägger du till följande fält i rutan Fält och gör följande val för rutorna Summa och Visa:
Field: EmpAlias: EmployeeID Total: Group By Show: YesI det här fältet grupperas data efter Anställningsnr.
I den andra kolumnen i frågerutnätet lägger du till följande fält i rutan Fält och gör följande val för rutorna Summa och Visa:
Field: Freight Total: Sum Show: YesI det här fältet summerar du fraktdata.
I den tredje kolumnen i frågerutnätet skriver du följande uttryck i rutan Fält och gör följande val för rutorna Summa och Visa.
OBS! I följande exempel används ett understreck (_) i slutet av en rad som ett rad fortsättningstecken. Ta bort understreck från slutet av raden när du skapar det här exemplet igen.
Field: RunTot: Format(DSum("Freight","Orders","[EmployeeID]<=" _& [EmpAlias] & ""),"$0,000.00") Total: Expression Show: YesUttrycket i rutan Fält använder en DSumma()-funktion för att summera fältet Frakt när Anställnings-ID är mindre än eller lika med den aktuella Anst. Sedan formateras fältet i dollar.
Kör frågan. Observera att följande poster visas i RunTot-fältet med en löpande summering:
Employee SumOfFreight RunTot ------------------------------------------------- Davolio, Nancy $8,836.64 $8,836.64 Fuller, Andrew $8,696.41 $17,533.05 Leverling,Janet $10,884.74 $28,417.79 Peacock, Margaret $11,346.14 $39,763.93 Buchanan, Steven $3,918.71 $43,682.64 Suyama, Michael $3,780.47 $47,463.11 King, Robert $6,665.44 $54,128.55 Callahan, Laura $7,487.88 $61,616.43 Dodsworth, Anne $3,326.26 $64,942.69