|
| Ideer til strukturering af forespørgelse~ Fra : ferdinand.k | Vist : 355 gange 40 point Dato : 25-07-03 15:26 |
|
Jeg har et spørgsmål som vedrører en forespørgelsel i Access...
Jeg har en tabel med alle perioder fremover. hver periode dækker fra d. 15 i måneden, til d. 14 i næstkommende måned. Dernæst har jeg en forespørgelsel som finder et kundenr (i kundetabellen) og tæller op på hvormange aktiviteter den pågældende kunde har. Problemet består i at når jeg viser listen over aktiviteter, vises kun de kunder som har én eller flere aktiviteter. Altså de kunder som endnu ikke har haft en aktivitet bliver altså ikke udskrevet. For at udskrive listen bruger jeg bare en count og tæller alle aktivitetsposterne op. Alle kunder skal udskrives således:
Kundenr;Navn;Periode;AntalAktiviteter
Hvordan kan en såddan forespørgelsel struktureres?
| |
|
Hej Ferdinand.k
Du skal lave det der hedder en "outer join", dvs. at du i din forespørgsel gør følgende;
Du klikker på stregen mellem kundetabellen og aktiviteter (dit joinfelt). Her vælger du "include all records from Kundetabel", der betyder at du får alle forekomster, også selv om der ikke er nogen tilhørende record (på dit keyfeldt) i din tabel aktivitetsposter.
Så simpelt er det faktisk.
Mvh Mikael
| |
|
det ville virker fint hvis jeg kunne nøjes med at få udskrevet kundenumrene på dem der ikke havde nogen aktivitet, men det skal vises således at alle kunder har en post hver for hver periode, hvor dem der har haft aktivitet i perioden har det skrevet, og dem der ikke har, står der 0 f.eks...
| |
|
Hej Igen
Jamen, stadig ikke noget problem. I det felt som du har antal poster i står der værdien NULL i. For at konvertere dette i det felt i forespørgslen som er din total.
OUT: IIf(IsNull([ref1]);0;[ref1])
OUT = Det navn feltet får når du kører forespørgslen
IIF = Funktion der fungere ligesom IF
isnull = Funktion der er sand når feltet er lig NULL
ref1 = det feldt der er totalfeltet. (Parameter 1)
; = adskillelsestegn, bemærk er i queries er dette et simicolon, hvor i VB code er det et komma.
0 = den værdi der sættes når parameter 1 er sand. (Parameter 2)
ref1 = den værdi der sættes når parameter 1 er falsk (Parameter 3).
Håber at dette giver mening. Har selv lavet masser af forespørgsler a'la dette.
Mvh Mikael
| |
|
selvfølgelig giver dette mening, men det giver ikke det korrekte resultat. Jeg tror vi taler forbi hinanden... Hvis jeg kører forespørgelsen, med kriterierne kundenr. = "11", skal der komme en list med 3 kolonner:
kolonne 1:
alle perioder, 01_01;01_02;01_03....... 11;10;12_10
Kolonne 2:
kundenr. 11
Kononne 3:
Antal aktiviteter hvis der er nogen. Hvis ikke, skal der stå "0".
| |
|
Hej igen igen ferdinand.k
Jeg er lidt i tvivl om du har perioder på kundenr. 11 hvis der ikke er nogen aktiviteter. Det tror jeg umiddelbart ikke.
I så fald tror jeg at du bliver nødt til at lave 2 forespørgsler. Den første jeg beskrev dækker kolonne 2 + 3, men den sidste kolonne skal vi lige hægte på. Det gøres nemmest ved at gemme den første forespørgsel og lave en ny forespørgsel hvor du vælger den første forespørgsel samt tabel med dine periode ved.
I denne forespørgsel laver du igen en outer join (som beskrevet tidligere), men denne gang vælger du at inkludere alle records fra "alle perioder" idet du ved den tidligere forespørgsel sikrede dig at du HAR alle forekomster af kundenr.
Jeg har ikke mere tid i dag, men er tilbage i morgen ved middagstid foran PC'en.
Du kan evt. skrive en mail og vise hvad det er du vil have ud af det, og hvordan dine tabeller ser ud, idet jeg måske stadig ikke er helt med. Det kommer jo an på hvordan du har lavet din tabeller, mht. sammenhængen af nøgler.
Det der er afgørende er hvordan kolonne 1-2 , 1-3 og 2-3 hænger sammen.
Hvad si'r du ?
Mikael
| |
|
NB
Min mailadr. er mikael_kure@yahoo.dk
Mvh Mikael
| |
|
jeg ser lige på det, og vender tilbage... vi snakkes ved imorgen, tak for hjælpen indtil videre...
| |
| Du har følgende muligheder | |
|
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
| |
|
|