2016-06-02 7 views
0

Ich baue eine Datenbank, die die im Laufe des Tages verbrachte Zeit verfolgt. Ich muss es wöchentlich anzeigen lassen, einschließlich der Tage, an denen noch keine Zeit eingegeben wurde. So wurden beispielsweise am Mittwoch drei Stunden für Aufgabe 1 und Donnerstag für zwei Stunden für Aufgabe2 eingegeben. Ich möchte Samstag bis Sonntag als Header anzeigen, mit Task1 und Task2 auf der linken Seite.Müssen in der Lage sein, eine Abfrage mit Daten für Header erstellen - der Bereich kann variieren

 5/29 5/30 5/31 6/1 6/2 6/3 6/4 
Task1       3 
Task2        2 

Ich spiele um mit verschiedenen Arten von Anfragen, aber ich habe keinen guten Weg gefunden, dies noch zu tun. Irgendwelche Gedanken? Der Benutzer kann von Woche zu Woche wechseln, um den angezeigten Zeitraum zu aktualisieren. Würde ein Pivot-Tisch hier am besten funktionieren? Ich habe nie wirklich mit ihnen in Access gearbeitet.

Dies wird hauptsächlich für die Anzeige verwendet und neue Zeiteinträge würden auf einem anderen Bildschirm eingegeben.

Danke,

+1

Überprüfen Sie den Kreuztabellenassistenten. – HansUp

Antwort

0

ms Zugriff hat Abfrage Kreuztabelle eingebaut. Dass der einfachste Weg wäre es, dies zu tun, und es wäre wirklich einfach sein.

haben Sie bereits eine Tabelle mit Daten? Was ist die Struktur davon? Wenn Sie gerade erst anfangen, kann der Tisch so einfach sein.

Datum, task1 Datum, task2 ...

0

Ihre Anfrage wird wie folgt aussehen:

TRANSFORM Count(Task.ID) AS CountOfTasks 
SELECT Task.ID 
FROM Task 
WHERE DateDiff("d",DateSerial(2014,8,1),[TaskDate]) Between 0 And 7 
GROUP BY Tasks.ID 
PIVOT Format([TaskDate],"m\/d") In (8/1,8/2,8/3,8/4,8/5,8/6,8/8); 

Um die Abfrage für ein bestimmtes Datum laufen, haben ähnliche SQL und ersetzen:

  • Jahr
  • Monat
  • Tag
  • Datum Sequenz

Die letzten muss so eingestellt werden, um die Ordnung aufrecht zu erhalten, wenn 10/1 und 1/1 Kreuzung.

setzen Sie dann die SQL für eine (neue oder Vorlage) query:

qd.SQL = SQL 

Ergebnis wird wie:

TaskID 8/1 8/2 8/3 8/4 8/5 8/6 8/8 
Task1364     1  
Task1367 2      
Task1369       2 
Task1371 1      
Task1374       1 
Task1375     1  
Task1377 1      
Task1391 1      
Task1400       1 
Task1402       1 

Nachtrag

Wenn keine ID, müssen Sie um die Felder zu verketten, um einen eindeutigen Wert zu bilden - zum Beispiel:

TRANSFORM 
    Count(*) AS CountOfTasks 
SELECT 
    [Client] & "-" & [Plan] & "-" & [Billable Work] & "-" & [Special Project] & "-" & [ResearchID] As TaskID 
FROM 
    Task 
WHERE 
    DateDiff("d",DateSerial(2014,8,1),[TaskDate]) Between 0 And 7 
GROUP BY 
    [Client] & "-" & [Plan] & "-" & [Billable Work] & "-" & [Special Project] & "-" & [ResearchID] 
PIVOT 
    Format([TaskDate],"m\/d") In (8/1,8/2,8/3,8/4,8/5,8/6,8/8); 
+0

Das war perfekt! Danke für Ihre Hilfe! Jetzt habe ich eine zusätzliche Frage, die das etwas komplizierter macht. Die Aufgaben sind nicht so einfach wie "Aufgabe", sondern werden stattdessen als eine Serie von 5 Elementen verfolgt. Client, PlanID, Arbeitstyp, Projekt, Aufgabe. Sie sind wie jede einzelne Kombination der oben genannten 5 Elemente getrennt. So wäre beispielsweise "Kunde A - Plan 1 - Abrechenbare Arbeit - Spezialprojekt - Forschung" ein einziger Eintragstyp. Dies müsste Task1364 in Ihrem obigen Diagramm ersetzen. Irgendwelche Ideen?Vielleicht sollte ich eine neue Frage beginnen, anstatt diesen Thread fortzusetzen. – JHT

+0

Das sollte möglich sein - siehe Bearbeiten. – Gustav

Verwandte Themen