online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon rw988 vom 03.10.2021, 22:36 Options

Abfrage in Access soll Datensätze gruppieren und bei fehlenden Datensätze eine leere Gruppe zeigen

Hallo,
ich bin neu hier.
Ich habe folgendes Problem:

In einer Datenbank stehen Datensätze in 5 Minuten-Intervallen.
Also, je 5 Minuten-Intervall 1 Datensatz, insgesamt umfasst die Datenbank 1ganzes Jahr (365*24*12=105120 Datensätze).
Jetzt möchte ich Summen je Stunde bilden. Im Prinzip nicht schwer.
Aber: manche 5-Minuten-Intervalle sind leer, d.h. der datensatz ist vorhanden (in Spalte 1 steht der Datumswert), aber das Feld, das aufsummiert werden soll ist leer wg. Messfehler.
Die Bedingung bei der Abfrage ist nun, dass die Stundensumme ebenfalls leer sein soll, sobald ein 5-Minuten-Intervall fehlt. Es soll in der Ergebnistabelle aber für diese fehlende Stunde ein leerer Datensatz angezeigt werden, sodass die Tabelle 365*24=8760 Datensätze haben muss.

Wie bekomme ich das hin? Ich steh da aufm Schlauch.

Außerdem will Access partout nicht die Datensätze nach dem Datum korrekt sortieren. Auf den 1.Januar folgt der 1.Februar und nicht der 2.Januar, wie man es gewohnt ist.


Antwort schreiben

Antwort 1 von Marie vom 04.10.2021, 15:17 Options

Zitat:
Außerdem will Access partout nicht die Datensätze nach dem Datum korrekt sortieren. Auf den 1.Januar folgt der 1.Februar und nicht der 2.Januar, wie man es gewohnt ist.


hallo, mit "Stundensumme" und "5-Minuten-Intervall" kann man nicht sehr viel anfangen. Schreib mal bitte welche formatierung Du benutzt und wie deine Felder heißen? Am besten postest Du hier mal den SQL-Code deiner falschen Abfrage und schreibst dann, was falsch ist oder fehlt. Wenn bei Dir auf den 1. Januar der 1. Februar folgt beim Datum, dann vermute ich mal, dass Du kein Datumsformat benutzt hast. Um Dir helfen zu können ist es aber wichtig, dass man deine Formate kennt und auch wie deine erste Spalte heißt.

Du drückst Dich auch ein bissel seltsam aus

Zitat:
Jetzt möchte ich Summen je Stunde bilden.
Was soll das heißen?

(365Tage*24Stunden*12Fünfminutenintervalle=105120 Datensätze). 365*24=8760 Datensätze soll Deine Abfrage haben, also pro Stunde einen Datensatz. Wenn ich Dich richtig verstehe hast Du das schon gelöst? Dann schick den SQL-Code der Abfrage rüber und schreib dazu was wo drinsteht, dann mach ich Dir die Bedingung dazu, dass das betreffende feld leer ist, sobald ein 5-Minuten-Intervall-Datensatzfeld leer ist. Und verwechsle bitte nicht ständig Tabelle mit Abfrage, sag genauer was Du willst. Willst Du eine neue Tabelle erstellen oder nur eine Abfrage?

Gruß marie

Antwort 2 von rw988 vom 04.10.2021, 23:49 Options

Hallo,

also Stundensumme bedeutet einfach, dass die Summe aller 12 5-Minuten-Intervalle in einer Stunde gebildet werden soll.
Dazu ist aber Voraussetzung, dass 12 Intervalle vorhanden sind. Wenn in einem Intervall kein Wert gemessen wurde, soll keine Summe, sondern eine Leerzeile ausgegeben werden.

Das Feld Datum ist als Datum/Uhrzeit definiert. Normalerweise funktioniert die Sortierung einwandfrei, nur eben nicht bei diesen Abfragen.

Der SQL-Code der entsprechenden Abfrage sieht so aus:

SELECT DISTINCTROW Weekday([Datum],2) AS WoTag, Format$([Tabelle].[Datum],'dd.mm.yyyy hh:00') AS [Datum nach Stunden], Sum(Tabelle.[Wert]) AS [Summe von Wert]
FROM Tabelle
GROUP BY Weekday([Datum],2), Format$([Tabelle].[Datum],'dd.mm.yyyy hh:00')
ORDER BY Format$([Tabelle].[Datum],'dd.mm.yyyy hh:00');

(Tabelle und Wert sind hier Platzhalter für die richtigen Namen, die ich mir aus Gründen der Vereinfachung spare)

Antwort 3 von rw988 vom 05.10.2021, 00:08 Options

Hallo Marie,

noch eine Ergänzung zur vorherigen Antwort:

Die Anzahl der Datensätze der Ergebnistabelle soll die Anzahl der Stunden pro Jahr sein, also 8760 in einem normalen Jahr. Meine Abfrage macht das auch, wobei es nicht gelingt, eine Leerzeile für unvollständige Stunden zu erzeugen. D.h. es sollte eine Leerzeile erzeugt werden, wenn von den 12 5-Minuten-Intervallen einer Stunde mindestens bei einem in der Spalte 'Wert' ein Null-Wert steht. Das klappt im Moment noch nicht.

Ich habe die Abfrage weitgehend mit dem Abfrage-Assistenten in Access aufgebaut.
Ich verwende übrigens Access 2000

Antwort 4 von RaHi vom 08.10.2021, 18:46 Options

Hallo re988,

Was steht im Feld WERT, wenn der Wert fehlt, eine leere Zeichenkette oder NULL (der nix-Wert
;-) ?

Gruß Ralf

Antwort 5 von rw988 vom 09.10.2021, 22:06 Options

Hallo Ralf,

Zitat:
Was steht im Feld WERT, wenn der Wert fehlt, eine leere Zeichenkette oder NULL (der nix-Wert
;-) ?


in dem Feld Wert steht der NULL-Wert, wenn es leer ist. Das ist allerdings steuerbar, da ich vorher über ein VisualBasic-Programm aus verschiedenen Fehlerquellen diese Leerwerte ermittle und auswerte und dann in dem jeweiligen Datensatz im Feld Wert ein NULL erzeuge, wenn der Wert fehlerhaft ist.
Insofern könnte ich dort auch was anderes reinschreiben, wenn es besser verarbeitbar wäre. Ich wollte jedoch in keinem Fall eine Null (0) erzeugen, da 0 als ordentlicher Wert durchaus möglich ist. Es musste eine Unterscheidung her zwischen einer 0 und einem Messfehler.

Grüße

Antwort 6 von lorf55 vom 24.10.2021, 11:45 Options

Hallo rw988,
ich glaube, ich habe eine Lösung für dein Problem:

SELECT DISTINCTROW 
      Weekday(Datum,2) AS WoTag, 
      Format$(Datum,'dd.mm.yyyy hhU\hr') AS [Datum nach Stunden],
      IIf(Count(Wert)=12,Sum(Wert),NULL) AS [Summe]
FROM Tab
GROUP BY Weekday(Datum,2), Format$(Datum,'dd.mm.yyyy hhU\hr')
ORDER BY Format$(Datum,'dd.mm.yyyy hhU\hr');


Die Anweisung zählt zusätzlich zu deiner Anweisung die Anzahl der Werte pro Gruppe. Ist die 12, wird die Summe gebildet und sonst NULL zurückgegeben, so dass die entsprechende Zeile leer ist.

Gruß
lorf

Antwort 7 von rw988 vom 25.10.2021, 14:20 Options

Hallo lorf,

Super, das hat geklappt.
Vielen Dank.
Mir war gar nicht klar, dass man in der Abfrage auch noch weitere Bedingungen mit IIF einbauen kann. Toll!
Das einzige Problem ist jetzt noch, dass die Sortierung des Datums nicht richtig klappt, da das Datum durch Format$ in einen String umgewandelt wird. Daher folgt auf den 01.01. der 01.02.
Aber das Hauptproblem ist schon mal gelöst.
Danke nochmal

Grüße
rw988

Antwort 8 von rw988 vom 25.10.2021, 14:33 Options

Noch ein Nachtrag:

das mit der richtigen Sortierreihenfolge klappt jetzt, indem ich den
Datumstring mit CVDate() wieder ins Datumformat zurückwandele (keine Ahnung, warum das überhaupt notwendig ist....)

SELECT DISTINCTROW 
      Weekday(Datum,2) AS WoTag, 
      CVDate(Format$(Datum,'dd.mm.yyyy hh:00')) AS [Datum nach Stunden],
      IIf(Count(Wert)=12,Sum(Wert),NULL) AS [Summe]
FROM Tab
GROUP BY Weekday(Datum,2), CVDate(Format$(Datum,'dd.mm.yyyy hh:00'))
ORDER BY CVDate(Format$(Datum,'dd.mm.yyyy hh:00'));

Ähnliche Themen

Abfrage in Access soll auch leere Felder anzeigen
maigansl  09.04.2008 - 115 Hits - 1 Antwort

Wieviel Datensätze pro Tabelle in Access möglich?
Ceilist  22.07.2008 - 43 Hits - 2 Antworten

postgreSQL Datensätze zählen
LowNoise  24.11.2008 - 26 Hits - 1 Antwort

Datensätze selektieren, filtern ... ???
Thomas14547  21.07.2009 - 151 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026