2017-11-16 3 views
0

Ich arbeite an einer Klasse Scheduling-Datenbank in MS Access. Es gibt eine Vielzahl von Kursen, von denen jeder mehrere Male unterrichtet wird, manchmal mehrmals am Tag, aber nicht notwendigerweise jeden Tag. Jeder Kurs verfügt über einen einzigartigen Satz von Software und Daten, die auf einem Laptop gespeichert sind. Es gibt eine Reihe von Laptops für jeden Kurs mit dieser Software geladen.Fensterfunktionen MS-Zugriff

Für jeden gegebenen Trainingstag muss ich eine Reihe von Laptop-IDs den richtigen Klassen in verschiedenen Räumen zuweisen, abhängig davon, wie viele Personen diese Klasse in diesem Raum belegen werden, damit die Instruktoren wissen, welche Laptops zu nehmen sind das Zimmer mit ihnen, um den Unterricht an diesem Tag zu unterrichten.

Zum Beispiel, ich habe die Rohdaten:

Date Room ClassName  HeadCount 
---- ---- ---------  --------- 
11/30 101 Intro   10 
11/30 102 Intro   15 
11/30 103 Course 2   5 
12/1 101 Intro   10 
12/1 102 Course 2   15 
12/1 103 Course 3   10 

Ich weiß auch, folgendes über die Laptops:

ClassName LaptopID 
--------- --------- 
Intro  LT.Intro_1 
Intro  ... 
Intro  LT.Intro_30 
Course 2 LT.Course 2_1 
Course 2  ... 
Course 2 LT.Course 2_30 
Course 3 LT.Course 3_1 
Course 3 ... 
Course 3 LT.Course 3_30 

Basierend auf den obigen zwei Tabellen, ich ausgeben möchte:

Date Room ClassName  HeadCount First Laptop Last Laptop 
---- ---- ---------  --------- ------------ ----------- 
11/30 101 Intro   10  LT.Intro_1  LT.Intro_10 
11/30 102 Intro   15  LT.Intro_11 LT.Intro_25 
11/30 103 Course 2   5  LT.Course 2_1 LT.Course 2_5 
12/1 101 Intro   10  LT.Intro_1  LT.Intro_10 
12/1 102 Course 2  15  LT.Course 2_1 LT.Course 2_15 
12/1 103 Course 3  10  LT.Course 3_1 LT.Course 3_10 

Ich weiß, dass dies eine Fensterfunktion ist, aber MS Access hat keine Vor- oder Nacheilung. Gibt es eine Problemumgehung?

+0

Zu einer anderen Datenbank wechseln. Obwohl wir keine Softwareempfehlungen geben sollten, kann ich darauf hinweisen, dass SQL Server Express vom selben Hersteller stammt, kostenlos ist und Fensterfunktionen unterstützt. –

+0

Wären Sie in der Lage, in Ihrer zweiten Tabelle eine andere Spalte zu erstellen, in der das Format von LaptopID "### _ TEXT" ist, also wie '001_LT.Intro', '030_LT.Intro 'usw.? Wenn dies der Fall ist (und Sie auch eine HeadCount-Spalte zur zweiten Tabelle hinzugefügt haben), könnten Sie MAX und MIN mit dieser neuen Spalte verwenden und nach ClassName und HeadCount gruppieren. – Pops

+0

Sind das Ihre tatsächlichen Tabellendefinitionen oder Abfrageergebnisse? Es ist möglich mit Zugang aber nicht sicher abour Leistung. –

Antwort

1

Sie könnten Ihre Tabellendefinitionen für eine bessere Leistung ändern. Ich habe zwei Tabellen neu erstellt, wie Sie bereits erwähnt haben.

Sie wissen, dass Ihre Laptop-IDs nacheinander sind und Sie den Personalbestand pro Klasse kennen. Um einem Vorsprung zu folgen, müssen Sie den letzten Mitarbeiter kennen. , die Teilnehmer am selben Datum für die gleiche Klasse vor der aktuellen Klasse/Ereignis zu tarieren.

x = sum (headCount) mit ID < currentID & Klassenname = aktuellerClassname & date = currentDate. (Current bedeutet currentRow.)

Jetzt kennen Sie die Gesamtzahl der Laptops, die vor der aktuellen Zeile und die Kopfzeile für die aktuelle Zeile verwendet wurden. Der erste Laptop würde

f = min(laptopid) where laptopid > x (x being totaLaptopUsedBefore this Row) 

für letzten Laptop sein, müssen Sie auch die aktuelle Mitarbeiterzahl hinzufügen.

l = min(laptopid) where laptopid >= currentHeadCount + x 

Hinweis f Kontrollen laptopid größer und L Kontrollen> =. Hier

ist eine Arbeits Demo, die Sie auf verbessern können:

Tabelle 1: tbl_ClassEvents

+----+------------+------+-----------+-----------+ 
| ID | date | Room | ClassName | HeadCount | 
+----+------------+------+-----------+-----------+ 
| 1 | 30/11/2017 | 101 | Intro  |  10 | 
| 2 | 30/11/2017 | 102 | intro  |  15 | 
| 3 | 30/11/2017 | 103 | Course 2 |   5 | 
| 4 | 01/12/2017 | 101 | Intro  |  10 | 
| 5 | 01/12/2017 | 102 | Course 2 |  15 | 
| 6 | 01/12/2017 | 103 | Course 3 |  10 | 
| 7 | 17/11/2017 | 101 | Intro  |  16 | 
+----+------------+------+-----------+-----------+ 

Table2: Tbl_ClassVsLaptop 
+----+-----------+----------------+ 
| Id | ClassName | LaptopId | 
+----+-----------+----------------+ 
| 1 | Intro  | LT.Intro_1  | 
| 2 | Intro  | LT.Intro_2  | 
| 3 | Intro  | LT.Intro_3  | 
| 4 | Intro  | LT.Intro_4  | 
| 5 | Intro  | LT.Intro_5  | 
| 6 | Intro  | LT.Intro_6  | 
| 7 | Intro  | LT.Intro_7  | 
| 8 | Intro  | LT.Intro_8  | 
| 9 | Intro  | LT.Intro_9  | 
| 10 | Intro  | LT.Intro_10 | 
| 11 | Intro  | LT.Intro_11 | 
| 12 | Intro  | LT.Intro_12 | 
| 13 | Intro  | LT.Intro_13 | 
| 14 | Intro  | LT.Intro_14 | 
| 15 | Intro  | LT.Intro_15 | 
| 16 | Intro  | LT.Intro_16 | 
| 17 | Intro  | LT.Intro_17 | 
| 18 | Intro  | LT.Intro_18 | 
| 19 | Intro  | LT.Intro_19 | 
| 20 | Intro  | LT.Intro_20 | 
| 21 | Intro  | LT.Intro_21 | 
| 22 | Intro  | LT.Intro_22 | 
| 23 | Intro  | LT.Intro_23 | 
| 24 | Intro  | LT.Intro_24 | 
| 25 | Intro  | LT.Intro_25 | 
| 26 | Intro  | LT.Intro_26 | 
| 27 | Intro  | LT.Intro_27 | 
| 28 | Intro  | LT.Intro_28 | 
| 29 | Intro  | LT.Intro_29 | 
| 30 | Intro  | LT.Intro_30 | 
| 31 | Course 2 | LT.Course 2_1 | 
| 32 | Course 2 | LT.Course 2_2 | 
| 33 | Course 2 | LT.Course 2_3 | 
| 34 | Course 2 | LT.Course 2_4 | 
| 35 | Course 2 | LT.Course 2_5 | 
| 36 | Course 2 | LT.Course 2_6 | 
| 37 | Course 2 | LT.Course 2_7 | 
| 38 | Course 2 | LT.Course 2_8 | 
| 39 | Course 2 | LT.Course 2_9 | 
| 40 | Course 2 | LT.Course 2_10 | 
| 41 | Course 2 | LT.Course 2_11 | 
| 42 | Course 2 | LT.Course 2_12 | 
| 43 | Course 2 | LT.Course 2_13 | 
| 44 | Course 2 | LT.Course 2_14 | 
| 45 | Course 2 | LT.Course 2_15 | 
| 46 | Course 2 | LT.Course 2_16 | 
| 47 | Course 2 | LT.Course 2_17 | 
| 48 | Course 2 | LT.Course 2_18 | 
| 49 | Course 2 | LT.Course 2_19 | 
| 50 | Course 2 | LT.Course 2_20 | 
| 51 | Course 2 | LT.Course 2_21 | 
| 52 | Course 2 | LT.Course 2_22 | 
| 53 | Course 2 | LT.Course 2_23 | 
| 54 | Course 2 | LT.Course 2_24 | 
| 55 | Course 2 | LT.Course 2_25 | 
| 56 | Course 2 | LT.Course 2_26 | 
| 57 | Course 2 | LT.Course 2_27 | 
| 58 | Course 2 | LT.Course 2_28 | 
| 59 | Course 2 | LT.Course 2_29 | 
| 60 | Course 2 | LT.Course 2_30 | 
| 61 | Course 3 | LT.Course 3_1 | 
| 62 | Course 3 | LT.Course 3_2 | 
| 63 | Course 3 | LT.Course 3_3 | 
| 64 | Course 3 | LT.Course 3_4 | 
| 65 | Course 3 | LT.Course 3_5 | 
| 66 | Course 3 | LT.Course 3_6 | 
| 67 | Course 3 | LT.Course 3_7 | 
| 68 | Course 3 | LT.Course 3_8 | 
| 69 | Course 3 | LT.Course 3_9 | 
| 70 | Course 3 | LT.Course 3_10 | 
| 71 | Course 3 | LT.Course 3_11 | 
| 72 | Course 3 | LT.Course 3_12 | 
| 73 | Course 3 | LT.Course 3_13 | 
| 74 | Course 3 | LT.Course 3_14 | 
| 75 | Course 3 | LT.Course 3_15 | 
| 76 | Course 3 | LT.Course 3_16 | 
| 77 | Course 3 | LT.Course 3_17 | 
| 78 | Course 3 | LT.Course 3_18 | 
| 79 | Course 3 | LT.Course 3_19 | 
| 80 | Course 3 | LT.Course 3_20 | 
| 81 | Course 3 | LT.Course 3_21 | 
| 82 | Course 3 | LT.Course 3_22 | 
| 83 | Course 3 | LT.Course 3_23 | 
| 84 | Course 3 | LT.Course 3_24 | 
| 85 | Course 3 | LT.Course 3_25 | 
| 86 | Course 3 | LT.Course 3_26 | 
| 87 | Course 3 | LT.Course 3_27 | 
| 88 | Course 3 | LT.Course 3_28 | 
| 89 | Course 3 | LT.Course 3_29 | 
| 90 | Course 3 | LT.Course 3_30 | 
+----+-----------+----------------+ 

Hier ist die Abfrage:

SELECT tbl_classEvents.ID 
    ,tbl_classEvents.DATE 
    ,tbl_classEvents.Room 
    ,tbl_classEvents.ClassName 
    ,tbl_classEvents.HeadCount 
    ,(
     SELECT min(laptopId) 
     FROM tbl_ClassVsLaptop T1 
     WHERE T1.ClassName = tbl_ClassEvents.ClassNAme 
      AND Mid([T1.LaptopID], InStrRev([T1.LaptopID], "_") + 1, 3) > (
       + Nz((
         SELECT sum(headCount) 
         FROM tbl_classEvents T2 
         WHERE T2.ID < Tbl_ClassEvents.ID 
          AND T2.[DATE] = [Tbl_ClassEvents].[DATE] 
          AND T2.[ClassName] = [Tbl_ClassEvents].[ClassName] 
         ), 0) 
       ) 
     ) AS FirstLaptop 
    ,(
     SELECT min(laptopId) 
     FROM tbl_ClassVsLaptop T1 
     WHERE T1.ClassName = tbl_ClassEvents.ClassNAme 
      AND Mid([T1.LaptopID], InStrRev([T1.LaptopID], "_") + 1, 3) >= (
       + [tbl_classEvents].[HeadCount] + Nz((
         SELECT sum(headCount) 
         FROM tbl_classEvents T2 
         WHERE T2.ID < Tbl_ClassEvents.ID 
          AND T2.[DATE] = [Tbl_ClassEvents].[DATE] 
          AND T2.[ClassName] = [Tbl_ClassEvents].[ClassName] 
         ), 0) 
       ) 
     ) AS LastLaptop 
FROM tbl_classEvents 
ORDER BY tbl_classEvents.DATE 
    ,tbl_classEvents.Room 
    ,tbl_classEvents.ClassNAme; 

Und die Ausgabe:

+----+------------+------+-----------+-----------+---------------+----------------+ 
| ID | DATE | Room | ClassName | HeadCount | FirstLaptop | LastLaptop | 
+----+------------+------+-----------+-----------+---------------+----------------+ 
| 7 | 17/11/2017 | 101 | Intro  |  16 | LT.Intro_1 | LT.Intro_16 | 
| 1 | 30/11/2017 | 101 | Intro  |  10 | LT.Intro_1 | LT.Intro_10 | 
| 2 | 30/11/2017 | 102 | intro  |  15 | LT.Intro_11 | LT.Intro_25 | 
| 3 | 30/11/2017 | 103 | Course 2 |   5 | LT.Course 2_1 | LT.Course 2_5 | 
| 4 | 01/12/2017 | 101 | Intro  |  10 | LT.Intro_1 | LT.Intro_10 | 
| 5 | 01/12/2017 | 102 | Course 2 |  15 | LT.Course 2_1 | LT.Course 2_15 | 
| 6 | 01/12/2017 | 103 | Course 3 |  10 | LT.Course 3_1 | LT.Course 3_10 | 
+----+------------+------+-----------+-----------+---------------+----------------+ 
Verwandte Themen