Mai 17, 2021, 12:36:33

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Datumsangaben gruppieren

Begonnen von BikeArno, April 23, 2021, 10:41:21

⏪ vorheriges - nächstes ⏩

BikeArno

Hallo,

ich habe zu einer Auswertungsproblematik leider keine Lösung gefunden und wende mich deshalb an dieses Forum.

Und zwar habe ich eine Abfrage-Tabelle mit einem Feld "DatumSchulabschluss". Wie der Name sagt, ist dort ein Datum eingetragen, welches ich zu Auswertungszwecken gern in drei Gruppen gruppieren möchte:

1) vor 2010
2) 2010 bis vor 2020 und
3) nach 2020.

Das Datumsformat in der Tabelle ist TT.MM.JJJJ, allerdings vom Datenzulieferer in Textform hinterlegt. Bisher ist es mir nicht gelungen, eine Gruppierung zu erstellen. Hat vielleicht jemand einen Tipp, wie man da vorgehen könnte?

Vielen Dank und Gruß

ebs17

Du könntest Dir per Switch-Funktion ein Gruppierungsmerkmal erzeugen und dieses dann verwenden.
Mit freundlichem Glück Auf!

Eberhard

BikeArno

Zitat von: ebs17 am April 23, 2021, 11:40:46Du könntest Dir per Switch-Funktion ein Gruppierungsmerkmal erzeugen und dieses dann verwenden.

Danke, ich habe mich da mal in die "Switch-Funktion" eingelesen und folgendes in der Abfrage in einer neuen Spalte versucht:

AltersGruppe: Schalter([Abschluss]<'31.12.2009';1;[Abschluss]<'31.12.2020';2;[Abschluss]>'31.12.2020';3)
Es wird zwar gruppiert, aber nicht korrekt. Die Zuordnungen zu den Gruppen stimmen nicht. Ich nehme an, ich kann das Datumsformat so nicht im Code verwenden? Wie aber dann?

Beaker s.a.

Hallo Arno,
Du musst das Datum in ein SQL-konformes Format bringen.
Da man das ständig braucht schreibe die folgende Prozedur in ein allgemeines
Modul
Public Function SQLDatum(datWert As Date) As String
    SQLDatum = Format$(datWert, "\#yyyy\-mm\-dd\#")
End Function
Diese Function verwendest du dann in deinen Abfragen
AltersGruppe: Schalter([Abschluss]<SQLDatum('31.12.2009');1;[Abschluss]<SQLDAtum('31.12.2020');2;[Abschluss]>SQLDatum('31.12.2020');3)
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

MzKlMu

Hallo,
es sollen ja ganze Jahre gruppiert werden, es genügt dann auf das Jahr zu vergleichen.
Außerdem liegt bei Dir das Datum als Text vor, daher muss mit ZDate noch ein richtiges Datum erzeugt werden.

Gruppe: Schalter(Jahr(ZDate([Abschluss]))<2010;1;Jahr(ZDate([Abschluss]))<2021;2;Jahr(ZDate([Abschluss]))>2020;3)Ob die Einteilung stimmt musst Du noch prüfen. Die im 1. Beitrag gezeigte Logik stimmt jedenfalls nicht.

1) vor 2010
2) 2010 bis vor 2020 und
3) nach 2020
Vor 2020 = 2019 und nach 2020 = 2021 es fehlt also das Jahr 2020.

Wahrscheinlich meinst Du eher so:
1) vor 2010
2) 2010 bis vor 2021 und
3) nach 2020

Oder anders gesagt
1) < 2010
2) < 2021
3) > 2020
Gruß
Klaus

ebs17

ZitatDas Datumsformat in der Tabelle ist TT.MM.JJJJ, allerdings vom Datenzulieferer in Textform hinterlegt
Das ist aber schon ein Problemfall. Bist Du darauf angewiesen, auf die Original-Datenquelle zu  verknüpfen?
Denn: Bei einem Import, der eine Schnittstelle darstellt, muss man nicht jeden Mist übernehmen, sondern man hat schon mal die Chance des Aufräumens => EINMAL rechnen bei Datenübernahme statt jedesmalig rechnen  bei jedem Anfassen.

Nebenbei:
[Abschluss]>'31.12.2020'
Bei Vergleich auf Text könnte der Fall größer nur eintreten, wenn es einen 32. oder höheren Tageswert gibt.
(Man darf schon darüber nachdenken, was man so schreibt.)
Mit freundlichem Glück Auf!

Eberhard

BikeArno

Zitat von: MzKlMu am April 23, 2021, 16:05:25Gruppe: Schalter(Jahr(ZDate([Abschluss]))<2010;1;Jahr(ZDate([Abschluss]))<2021;2;Jahr(ZDate([Abschluss]))>2020;3)

Herzlichen Dank für die Hinweise. Bis auf ein kleines Problem funktioniert alles, Klasse. Allerdings habe ich beim Datum-Umwandeln mittels ZDate mal wieder den altbekannten #Fehler, wenn im originalen Datumsfeld (bzw. Textfeld) ein Nullstring "" vorhanden ist. Bei anderen Funktionen konnte ich das berücksichtigen. Aber an welcher Stelle dieses Codes kann man ein entsprechendes Kriterium so berücksichtigen, dass der Fehler vermieden wird?

MzKlMu

Hallo,
schließe in der Abfrage in der Where Klausel die Datensätze mit "" aus.
Es macht ja keinen Sinn diese zum Gruppieren verwenden zu wollen.


PS:
Warum befolgst Du nicht endlich mal die Hinweise zu Datum und stellt das entsprechende Feld auf den Datentyp "Datum/Uhrzeit" um. Das fällt Di doch immer wieder auf die Füße.
Gruß
Klaus

ebs17

ZitatEs macht ja keinen Sinn diese zum Gruppieren verwenden zu wollen.
Wer weiß ...

Man müsste aber erst einmal eine abgeschlossene Überlegung, in welche Jahresgruppe ein unbekanntes Datum einzuordnen wäre, voranstellen.

Zitatden altbekannten #Fehler
Naja. Bei manchen ist es lange her, so dass sich der Mantel des Vergessens ausgebreitet hat.
Mit freundlichem Glück Auf!

Eberhard

BikeArno

Zitat von: MzKlMu am April 26, 2021, 12:16:31Warum befolgst Du nicht endlich mal die Hinweise zu Datum und stellt das entsprechende Feld auf den Datentyp "Datum/Uhrzeit" um.

Weil ich leider nicht weiß wie. In der Ursprungstabelle habe ich das Feld als Datum eingestellt. Durch eine Union-Abfrage ist diese Formatierung scheinbar hinfällig und mir ist auch nicht klar, wie ich in der Union das Feld als Datum formatieren kann. Anschließend erstelle ich dann eine Abfrage, mit der ich jetzt arbeite. Dort setze ich dann "ZDate" ein.

Die WHERE-Klausel habe ich unter "Kriterium" der Abfrage gesetzt: "Where [Abschluss]">"" Wäre das so richtig? Kommt nämlich zu #Fehler.

 

MzKlMu

Hallo,
... Where [Abschluss] > ""
Bitte verwende füe Codedarstellungen immer die Codetags des Forums. Das ist dann deutlich übersichtlicher.

ZitatDurch eine Union-Abfrage ist diese Formatierung scheinbar hinfällig
Das muss nicht sein. Wahrscheinlich verwendest Du irgendein Format.
Zeige mal die Union bzw. einen Link auf das Thema wo Du diese schon mal gezeigt hast.
Gruß
Klaus

BikeArno

Zitat von: MzKlMu am April 26, 2021, 17:06:24... Where [Abschluss] > ""

Hier erhalte ich leider folgende Meldung: "Verwendung von Null unzulässig".

Die Union sieht (etwas gekürzt) so aus:
SELECT tbl_Schule1.[Nummer] as ID,"","","","",tbl_Schule.[v_Einrichtungsname] as Schulname, tbl_Schule.v_Lehrer] as Lehrkraft, tbl_Schule.[v_VName] as Vorname, tbl_Schule.[v_NName] as Nachname, tbl_Schule.[v_DatumAbschluss] as Abschluss,"",""
FROM tbl_Schule1

UNION SELECT tbl_Schule2.[Nummer] as ID,"","","","",tbl_Schule.[v_Einrichtungsname] as Schulname, tbl_Schule.v_Lehrer] as Lehrkraft, tbl_Schule.[v_VName] as Vorname, tbl_Schule.[v_NName] as Nachname, tbl_Schule.[v_DatumAbschluss] as Abschluss,"",""
FROM tbl_Schule2;

MzKlMu

Hallo,
was ist denn in der Tabelle tbl_Schule das Feld v_DatumAbschluss für ein Datentyp?

Wenn Du Du die Unionabfrage direkt öffnest, wie wird dann das Feld Abschluss angezeigt, linksbündig oder rechtsbündig ?
Gruß
Klaus

BikeArno

Zitat von: MzKlMu am April 27, 2021, 23:41:39was ist denn in der Tabelle tbl_Schule das Feld v_DatumAbschluss für ein Datentyp?
Hallo,

in tbl_Schule = Datum/Uhrzeit (rechtsbündig), in der Union dann linksbündig.

Könnte das im Zusammenhang mit der o.g. Fehlermeldung "Verwendung von Null unzulässig" stehen?