Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Fortlaufendes Datum in einem Tabellenformular

Begonnen von Chris SZ, Januar 25, 2012, 13:35:32

⏪ vorheriges - nächstes ⏩

Chris SZ


Wie meint ihr das mit einer Hilfstabelle? Könnt ihr mir das mal erläutern höre das zum ersten mal.

ebs17

Eine Stammdatentabelle (Bestandteil des eigenen Datenmodells) enthält wie gesagt Stammdaten: Kunden, Artikel, Preise, Adressen usw. Dort sollten nur reale Einträge vorkommen.

Hilfstabellen dagegen stellen bspw. Daten zur Verfügung, die man in Abfragen und Berechnungen (auch verschiedenen) verwenden kann. Solche Hilfstabellen können auch schön unnormalisiert sein sowie Berechnungsergebnisse enthalten. Klassisches Beispiel für eine solche Hilfstabelle ist eine Kalendertabelle, wo man in einer Spalte das laufende Datum führt und in weiteren Spalten Informationen wie Wochentagsname, Kalenderwoche, Quartal, IstFeiertag, IstWochenEnde uva.
Diese zusätzlichen Daten kann man zwar laufend immer wieder neu berechnen. Da ein Kalender sich aber nicht ändert, genügt auch eine einmalige Berechnung. Das letzteres auch funktioniert, zeigt die Praxis, wo es auch Kalender aus Papier gibt.

Wenn man solche Daten aus indizierten Feldern einer solchen Hilfstabelle in eigene Abfragen einbezieht, wird man deutlich performantere Abfragen erstellen können als wenn man Berechnungen in Abfragen ausführt und dann solche Ausdrücke weiter filtern, gruppieren, aggregieren, sortieren muss (Stichwort Indexnutzung).
Zusätzlich erhält man aus solch einer Hilfstabelle "fehlende" Infomationen und kann damit arbeiten, wie die weiter oben gezeigte Abfrage zeigt.

In Deinem Fall ist die gemeinte Hilfstabelle eine abgemagerte Kalendertabelle und besteht aus einem Feld (ich nannte es Monatserster) vom Typ DateTime. Da hinein kommen fortlaufend die Datumswerte 01.01.2012, 01.02.2012, 01.03.2012, ... je nach benötigtem Zeitraum.
Monatserster deshalb, weil man per DateAdd einfach neue Werte erzeugen kann und weil man per Formatierung beliebige Datums-Ausdrücke erzeugen kann (mmm, yyyy-mm u.a.).

Eine spezielle und hochinteressante Variante zeigt Nouba. Hier ist die Hilfstabelle eine einfache Zahlentabelle (vielfach wiedernutzbar): SQL-Rezepte

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Chris SZ

So habe die Tabelle nun so angelegt wie mein erster Gedanke war, ohne Hilfstabelle. Sondern mit dem Code von DF6GL. Ersteinmal danke dafür.

Nun möchte ich eine Abfrage erstellen, damit ich auf Knopfdruck alle offenen Beiträge bekomme. Daher möchte ich abfragen ob der Datensatz schon vorhanden ist sprich im März der Februar schon da ist und ob bezahlt wurde. Wie Kann ich diese Beiden Kriterien zusammen abfragen?

Und wie kann es hin bekommen, das die Abfrage erst ab dem Vertragsbeginn anfängt auszuwerten?

Hoffe hier kann mir auch noch einmal aus der Klemme geholfen werden. Der Rest steht zum größten Teil schon.

Gruß

Chris SZ

Hallo,

wollte nun doch die Abfrage mittels Hilfstabelle machen. Habe auch eine Hilfstabelle erstellt, und er zeigt mir auch bei der Abfrage die offenen Beiträge an, aber leider nur für Monate wo keiner bezahlt hat. Ist es möglich, das er die Abfrage mit Hilfstabelle für jeden einzelnen durch führt?

und ist es möglich das er mir dann erst die Monate anzeigt die hinter dem "Vertragsbeginn" liegen?

Hoffe hier kann mir nochmal weiter geholfen werden.

ebs17

Die Antwort auf Deine Fragen lautet: Ja.

Du müsstest für jeden "Einzelnen" einen Kalender aus einem Kreuzprodukt zwischen dem "Einzelnen" und der Hilfstabelle erzeugen und diese resultierende Abfrage  (statt der Hilfstabelle in oberen Beispiel) mit der Stammdatentabelle abgleichen. Filterungen zur gezielten Senkung der Datenmenge sind nicht nur möglich, sondern sehr sinnvoll.

Ein Beispiel will ich an der Stelle nicht erstellen, weil ich keine Vorstellung von Deinen Tabellen und Abfragen habe. Überdies hast Du sicher bemerkt, dass sich die Aufgabenstellung geändert hat: Vortragen von leeren Datensätzen und Ermitteln von nicht bezahlten Beiträgen (was auch tief in die Vergangenheit gehen kann) sind verschiedene Vorgänge.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Chris SZ

Und wie erstelle ich das Kreuzprodukt? und vor allem wie bekomme ich es dann hin, das er mir mit einem einzigen ausführen alle offenen beiträge für alle Mitglieder anzeigt und nicht nur für eins?

ebs17

ZitatUnd wie erstelle ich das Kreuzprodukt?

Das ist das Einfachste, was es bei SQL gibt: Man verwendet zwei oder mehr Tabellen und verwendet keinerlei Einschränkungen per JOIN oder WHERE-Klausel. Daraus ergibt sich dann eine Datensatzanzahl, die dem Produkt der Datensatzzahlen der verwendeten Tabellen entspricht: Alles wird mit allem kombiniert.
SELECT H.Monatserster, D.Einzelner
FROM Hilfstabelle H, DeineTabelle D


MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Chris SZ

So nun habe ich das Problem gelöst, ein dickes Danke an alle die mir geholfen haben und genug Geduld mit mir hatten.