1

Wir verfügen über eine Microsoft Access-Datenbank, die eine fortlaufende Liste von Kunden überwacht. Jeder Kunde muss einen Vertrag mit mehreren Abteilungen abschließen - insgesamt 13 (!) Abteilungen - für die wir den aktuellen Fortschritt für jeden Kunden verfolgen wollen, wenn ein Vertrag gesendet und empfangen wird. Diese Struktur ähnelt etwas wie folgt aus:Struktur einer relationalen Datenbank zum Vergleichen mehrerer Daten

Table 1 
    ------------------------------------------------------------------------------------------------------------------- 
    CUSTOMER_ID | ... | DEP_A_SENT | DEP_A_RECEIVED | DEP_B_SENT | DEP_B_RECEIVED | DEP_C_SENT | DEP_C_RECEIVED | ... | 
    ------------------------------------------------------------------------------------------------------------------- 
     1  | ... | 2015-05-01 | 2015-05-03 | 2015-05-04 | 2015-05-09 | 2015-05-01 | 2015-05-05 | ... | 
     2  | ... | 2015-05-01 | 2015-05-05 | 2015-05-01 | 2015-05-03 | 2015-05-13 |  ---  | ... | 
     ... 
  • Ich möchte die Zeitspanne zwischen DEP_X_SENT mit DEP_X_RECEIVED für Kunden und Abteilung (zB „Abteilung A berechnen können: 2 Tage, Abteilung B: 5 Tage ... "für Kundennummer 1)
  • Noch wichtiger, ich möchte alle DEP_X_RECEIVED Daten miteinander für einen Kunden vergleichen: Bestimmen des ersten (MIN) und des letzten (MAX) Datums, an dem ein Vertrag zum Auffinden eingegangen ist wie viele Tage dauert es für jeden Kunden, bis alle Verträge eingegangen sind. (z. B. "die Verträge wurden innerhalb von 6 Tagen empfangen" für Kundennummer 1, da die erste am 3. Mai und die letzte am 9. Mai empfangen wurde). Außerdem möchte ich die durchschnittliche Zeitspanne für alle Kunden berechnen. Wenn der Vertrag noch nicht empfangen wurde, ist der Wert in diesem Feld nicht vorhanden.

In MySQL kann ich mit Funktionen wie zum GREATEST und LEAST arbeiten Werte zwischen verschiedenen Spalten zu vergleichen, aber in Access ich habe jetzt auf VBA verlassen, und ich denke, es ist eine schlechte Praxis betrachtet wird. Wie kann ich meinen Tisch normalisieren und umstrukturieren, um meine Ziele mit den einfachen Operationen MAX, MIN und AVG zu erreichen? Danke vielmals!

+1

Ich glaube nicht, dass Sie in MS Access effektiv tun können, was Sie wollen. Führen Sie die Vergleiche in VBA aus, oder überlegen Sie, zu einer anderen Datenbank zu wechseln, z. B. SQL Server. –

Antwort

2

einfach falten Sie Ihre vorhandene Tabelle in diese Struktur:

create table TABLE_1 (
    CUSTOMER_ID  int, 
    DEPARTMENT_ID int, -- foreign key reference to DEPARTMENT table 
    SENT   date, 
    RECEIVED  date 
); 

Jetzt können Sie die gewünschte Analyse einfach durchführen, und das ursprüngliche Layout abgerufen wird entweder als ein Pivot-Bericht oder LEFT OUTER aus der Tabelle DEPARTMENT JOIN auf den neuen TABELLE 1.