654 Aufrufe
Gefragt in Datenbanken von
Hallo,

jemand hat mir freundlicherweise die nachstehende Formel für Access gegeben, diese hat jetzt geklappt und geht wunderbar an meinem PC.

DatDiff("jjjj";[Eintritt-B];[Austritt-B])+(Format([Eintritt-B];"mm""dd""")>Format([Austritt-B];'mm"dd"')) & " Jahre " & (Monat([Austritt-B])-Monat([Eintritt-B])+(Tag([Eintritt-B])>Tag([Austritt-B]))+12) Mod 12 & " Monate " & Tag([Austritt-B])-Tag([Eintritt-B])+Wenn(Tag([Eintritt-B])>Tag([Austritt-B]);Tag(DatSeriell(Jahr([Eintritt-B]);Monat([Eintritt-B])+1;0));0)+1 & " Tage"

Jetzt wollte ich noch fragen, ob es möglich ist, das Ergebnis in der korrekten Reihenfolge anzuzeigen. WEnn ich auf die Funktion Aufsteigend sortieren klicke, fängt die Sortierung mit

0 Jahre .....
1 Jahre ....
und jetzt leider nicht 2 Jahre.....
sondern es geht mit 10 Jahre .... weiter
11 Jahre
12 Jahre
13 Jahre
14 Jahre
15 Jahre
und jetzt erst wieder mit 2 Jahre .... weiter

Ist es möglich, dieses Problem zu lösen?

Vielen Dank für jegliche Unterstützung!

Gruß
Zipora

4 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo Zipora,

die Lösung kann ich dir nicht anbieten, aber vielleicht einen Lösungsansatz.
Das Sortierproblem liegt daran, dass die Daten als Text und nicht als Zahl vorliegen. Dann erfolgt die Sortierung als alphabetische Sortierung und da entscheidet zuerst die erste Stelle, dann erst die zweite u.s.w.

Versuche also die Ergebnisse als Zahl darzustellen, dann erfolgt die Sortierung numerisch.

Gruß
computerschrat
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
folgende Abfrage ist etwas eleganter,
Du kannst bei dem Editor in Access auf "SQL" wechseln und da kann man frei schreiben:


SELECT
Str(Year (DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))-1900)+
" Jahr(e)"+
IIf(Month(DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))>1,","+
Str(Month(DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))-1)+
" Monat(e)", "")+
IIf(Day (DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))>1,","+
Str(Day (DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))-1)
+ " Tag(e)", "")
AS Dauer
, *
FROM test
ORDER BY [Austritt-B]-[Eintritt-B] ASC


Das Wort ASC durch DESC ersetzen für Absteigende Sortierung.
Den Tabellen namen "test" ersetzen durch den echten Namen.

Testausgabe:
Dauer Eintritt Austritt
Dauer Eintritt-B Austritt-B
15 Jahr(e), 2 Monat(e), 18 Tag(e) 03.04.1995 18.06.2010
17 Jahr(e), 1 Tag(e) 01.01.1988 01.01.2005


Im "Entwurfseditor" gäbe es noch die möglichkeit eine Spalte
[Austritt-B]-[Eintritt-B] hinzuzufügen, bei der den Haken "Anzeigen" entfernen und diese dann sortieren.
0 Punkte
Beantwortet von
Vielen Dank für alle Tipps und auch die SQL-Formel!


SELECT
Str(Year (DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))-1900)+
" Jahr(e)"+
IIf(Month(DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))>1,","+
Str(Month(DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))-1)+
" Monat(e)", "")+
IIf(Day (DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))>1,","+
Str(Day (DateAdd("d",[Austritt-B]-[Eintritt-B],'1900-01-01'))-1)
+ " Tag(e)", "")
AS Dauer
, *
FROM test
ORDER BY [Austritt-B]-[Eintritt-B] ASC


Jedoch ist es so, wenn ich die Formel eingebe, es klappt wunderbar, die Anzeige in der richtigen Reihenfolge (bis auf die Monate), jedoch ist es nicht möglich, andere bzw. weitere Felder in die Abfrage miteinzubeziehen, so wie bei einer normalen Abfrage, wo man unterschiedliche Felder auswählen kann.
Bei dieser Formel wird alles was zum Datum (4 Felder oder Spalten) gehört angezeigt und noch der Nachname (1 Feld oder Spalte) der Person, aber weitere Felder mithinzuzunehmen ist nicht möglich, wie z. B. Vorname und komplette Anschrift, und weitere Info's - ist nicht möglich!

Man sollte diese Abfrage auch in einen Bericht einfügen können, das scheint nicht möglich zu sein, es kann aber sein, dass ich mich auch täusche, bin noch am Versuchen!

Vielen Dank für alles!

Gerne nehme ich weitere Tipps entgegen! Danke!

Gruß
Zipora
0 Punkte
Beantwortet von
Hallo Zipora,

füge ein ungebundenes Feld in der Abfrage hinzu mit der Differenz in Tagen - Formel: Ausdr1: [B]-[A] und sortiere aufsteigend nach diesem Feld, dieses Feld kann bei der Erstellung eines Formulars bzw. Berichtes vorher ausgeblendet werden.

Gruß
Paul1
...