online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon Verwalter_51 vom 30.10.2020, 12:27 Options

Lösung

Datum - Sortierung in Access

Hallo Supportler - ich mal wieder,

bin bis jetzt (außer zu einer Notlösung) zu keinem befriedigendem Ergebnis bei Sortierung einer LP-Liste nach:
Interpret, Erscheinungsdatum, LP-Titel (in dieser Reihenfolge!).
Das Datum soll dabei nur in Monat und Jahr – Beispiel: Feb 1963 – angezeigt werden, wenn ich die Daten so genau habe.
Das klappt auch soweit -Dank der Hilfe von Ralf :-)
Bei manchen Platten ist aber nur das Jahr bekannt bei einigen nicht einmal das.
Eine Datumszelle leer zu lassen ist kein Problem aber mit welcher Formatierung bekomme ich in der Tabelle eine korrekte aufsteigende Sortierung (wenn mehrere LP's eines Interpreten mit Komplettdatum da sind) hin, wenn bei Anderen dann nur Monat-Jahr oder nur das Jahr zur Verfügung steht?
Bei Datumsformat muss ich immer das ganze Datum eingeben, sonst Fehlermeldung auch wenn Format mmm jjjj eingestellt ist. Beim Datumsformat ist die aufsteigende Sortierung kein Problem, aber dann muss ich als „Notlösung“ eben fiktive Tag- und Monatsdaten eingeben auch wenn ich nur das Erscheinungsjahr weiß. Damit zumindest die falschen Monate nicht angezeigt werden kann ich dann nur noch jjjj formatieren damit nur das Jahr angezeigt wird.
Auch dann stimmt die aufsteigende Reihenfolge, aber die Daten sind falsch (bzw. nicht ganz korrekt).
Bei Formateinstellung „Text“ kann ich zwar nach Jahren und Monat sortieren, aber innerhalb eines Jahres kommen natürlich die Monate nicht in der richtigen Reihenfolge, da z.B. der April vor den März sortiert wird und so die Erstausgabeliste nicht stimmt.
Welche Lösung kann mir hier weiterhelfen?
Da ich noch nicht lange mit Access arbeite habe ich leider noch null Ahnung von SQL oder auch VBA-Makros.

Für hilfreiche Antworten schon mal herzlichen Dank

Holger


Antwort schreiben

Antwort 1 von lorf55 vom 31.10.2020, 07:58 Options

Hallo Holger,
und wenn du nun jeweils für Tag, für Monat und für Jahr ein Tabellenfeld nehmen würdest, denn könntest du deine Daten eingeben, wie es dir passt. Du müsstest denn nur diese für die Ausgabe mit einer Abfrage wieder zusammen bauen. Denn kannst du ganz gepflegt sortieren, wie es dir passt.
Die Abfrage könnte so aussehen:
SELECT [Tag] & IIF(Tag,".","") & [Monat] & IIF(Monat,".","") & [Jahr] AS Datum
FROM Test
ORDER BY Test.Jahr;
Wenn du Monat als Text anlegst, kannst du auch z.B. März und 03 und 3 abwechselnd benutzen. Denn brauchst du allerdings zum Sortieren noch eine Tabelle TestMonate mit den Monatsnamen und einem Feld für die Sortierreihenfolge, z.B.
Monat     Sortierung
1              1
01             1
Januar         1
2              2
02             2
Februar        2


usw

Denn sieht die Abfrage am Ende so aus;
SELECT [Tag] & IIf([Tag],".","") & [Test.Monat] & IIf([Test.Monat],".","") & [Jahr] AS Datum, Test.Jahr, TestMonate.Sortierung AS MonSortierung
FROM Test INNER JOIN TestMonate ON Test.Monat = TestMonate.Monat
ORDER BY Test.Jahr;


Ich hoffe, du kannst damit was anfangen.
Gruß
lorf

Antwort 2 von Verwalter_51 vom 31.10.2020, 12:27 Options

Hallo lorf,
jetzt erst mal ne kurze Zwischenmeldung und einem Danke, das du dich mit meinem Problem beschäftigt hast.
Werde jetzt am Wochenende in Ruhe die angedachte Möglichkeiten von dir ausprobieren. Ergebnisbericht folgt dann.

Gruß nach Magdeburg und ein schönes Wochenende

Holger

Antwort 3 von lorf55 vom 31.10.2020, 19:26 OptionsLösung

Lösung
Gerade wollte ich schreiben, wie das Ergebnis aussieht, da habe ich gemerkt, dass Nur-Jahreszahlen nicht mit angezeigt werden. Deshalb ist die Abfrage jetzt so:
SELECT [Tag] & IIf([Tag],".","") & [Test.Monat] & IIf([Test.Monat],".","") & [Jahr] AS Datum, 
Test.Jahr, TestMonate.Sortierung AS MonatSortierung
FROM Test LEFT JOIN TestMonate ON Test.Monat = TestMonate.Monat
ORDER BY Test.Jahr, TestMonate.Sortierung;

So sieht das Ergebnis denn aus:
Datum		Jahr	MonatSortierung
1967		1967	
Januar.1967	1967	1
20.01.1967	1967	1
01.1967		1967	1
Februar.1967	1967	2
05.1977		1977	5
1988		1988	
4.Januar.1997	1997	1
23.02.1997	1997	2
5.1.2002	2002	1
März.2003	2003	3


Jahr und MonatSortierung sind hier nur zur besseren Übersicht. Wenn die Nur-Jahreszahlen als Letzte stehen sollen, lässt du TestMonate.Sortierung weg, so dass nur ORDER BY Test.Jahr; übrig bleibt.

Die Test-Tabelle sieht so aus:
Tag	Monat	Jahr
5	1	2002
23	02	1997
	März	2003
		1967
4	Januar	1997
	Februar	1967
	01	1967
20	01	1967
	Januar	1967
		1988
	05	1977


Und der Vollständigkeit halber meine TestMonat-Tabelle:
Monat	Sortierung
1		1
01		1
Januar		1
January		1
2		2
02		2
Februar		2
February	2
3		3
03		3
März		3
March		3
4		4
04		4
April		4
April		4
5		5
05		5
Mai		5
Mai		5


Wenn du jetzt schon jede Menge "Datumse" eingegeben hast, brauchst du die nicht nochmal neu eingeben, sondern kannst die in die Test-Tabelle einfügen mit:
INSERT INTO Test ( Tag, Monat, Jahr )
SELECT day(deinDatum), month(deinDatum), year(deinDatum) FROM deineTabelle;


So weit, so gut, wenn es dir nicht zu kompliziert ist.


Gruß
lorf

Antwort 4 von Verwalter_51 vom 01.11.2020, 15:10 Options

Hallo lorf,

mit ein wenig umstellen auf meine Daten hab ich das jetzt Dank deiner Hilfe hinbekommen und meine Sortierung klappt jetzt so, wie angedacht.
Ich hatte eben nicht bedacht, das man auch das Datum noch "atomar" zerlegen muss um so eine Sortierung zu erreichen.
Hast mir sehr geholfen :-) gibt 50 Bonuspunkte

Gruß Holger

Antwort 5 von lorf55 vom 01.11.2020, 16:52 Options

Ich glaub ich werde reich ;-).

Ähnliche Themen

Access Datenbank 2000 mit Access 1997 öffnen
jam85385  02.05.2007 - 225 Hits - 1 Antwort

Access, import Access-Tabellen
KRD  02.09.2007 - 265 Hits - 1 Antwort

Read-Only-Verknüpfung von Access zu Access Tabelle
Emil  28.08.2007 - 61 Hits - 3 Antworten

datum in access
morpheus__85  05.09.2007 - 106 Hits - 24 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:Thu Jan 8 21:07:44 2026