Avatar billede Mortimer12 Nybegynder
11. oktober 2011 - 08:47 Der er 3 kommentarer og
1 løsning

Access: En kringlet affære

Undskyld den dårlige overskrift, jeg ved simpelthen ikke hvordan jeg skal forklare det i en overskrift.

Jeg har en tabel med data over en række projekter. Hver måned kommer der en ny record for hvert projekt der er åbent den dag.

Tabellen har af vigtige felter disse: Projektnummer, år, måned og salg.

Således kan en record se sådan ud: 68768, 2010, 6, 100.000

Var projektet så åbent i juli 2010, kom der dengang en ny record: 68768, 2010, 7, x (nyt salgstal).

Disse records trækkes fra en stored procedure, hvor man kan angive starttidspunkt og sluttidspunkt. Der er naturligvis masser af projekter, der så hver især har en record for hver måned der har været åbne.

OK, lad os sige, at vi kalder SP'en og beder om alle records fra 2009 01 til 2010 12. Så får vi en masse ud på lad os sige 2000 projekter, ialt 20000 records. Nogle projekter har første record 2009 03 og har så én for hver måned frem til 2010 08. Lad os tage udgangspunkt i dette projekt. Dataene skal ligge til grund for en graf der viser salg med beløb og måned/år på akserne.

Grafen er helt på plads, men den viser lidt forkert, fordi brugerne gerne vil have, at føromtalte projekt der lukker 2010 08 også skal tælles med det resterende af perioden. Med andre ord skal salgs-tallet skal 2010 08 på det pågældende projekt kopieres til en nye records for 09 10 11 og 12. Naturligvis skal der IKKE genereres records for 2009 02 og 2009 01, hvor det godt nok heller ikke optræder.

Jeg er klar over der skal et par queries til, og det er også ok.

Jeg har lavet disse:

Query 1: Trækker alle perioder ud, dvs. den kigger på projekterne og finder alle kombinationer af måned og år.

Query 2: Finder, for hvert projekt, den sidste record (max af år og derefter max af måned), således at jeg har det salgs-tal der skal puttes på de nye records. Denne record virker dog ikke helt som den skal.

Query 3: Fletter Q1 og Q2 sammen og laver en record for hver periode (år og måned) for hvert projekt og putter seneste salgs-tal på.

Query 4: Bruger projekt-tabellen og Q3 med et join. Hvis projekt-tabellens salgs-tal er Null (recorden fandtes ikke) tager den salgs-tallet fra Q3 i stedet.


Udover lidt bøvl i Q2 virker dette efter hensigten, bortset fra én vigtig ting. Den genererer records for ALLE perioder et givent projekt ikke har indenfor perioden. Dvs. starter det i 2009 03, bliver der også lavet for 2009 02 og 2009 01. Det vil jeg gerne undgå...

Nogen der kan hjælpe?
Avatar billede Slettet bruger
11. oktober 2011 - 09:28 #1
Hvis du har en forespoergsel, som giver dig dine salgstal og en som giver dig de beregnede tal, som skal indsaettes i tilfaelde af Null. Saa lav noget i den her retning:
iif(isnull(salgstal);beregnettal;salgstal)
Avatar billede Mortimer12 Nybegynder
11. oktober 2011 - 09:39 #2
Det har jeg allerede, lige nøjagtig som du skriver (se Query 4). Det er ikke der problemet ligger. Problemet ligger i, at der bliver genereret nogle records (for måneder før projektet blev startet) der ikke skulle være skabt.
Avatar billede Slettet bruger
11. oktober 2011 - 10:05 #3
iif((isnull(salgstal) AND AarMdSalg<=AarMdBeregnet);beregnettal;salgstal)
Avatar billede Mortimer12 Nybegynder
23. marts 2012 - 21:24 #4
Smid svar, så får du point...
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