Sortierung von fortlaufenden Nummernblocks

Hallo zusammen,
ich habe ein kleines Problem. Ich habe ein mysql Tabelle ua mit Datum ID nummer und name.

Es
geht um den Arbeitseinsatz im Verein. Also Einsatz xy wurde am 16.11.13, 17.11.13 und 23.11.13 durchgeführt. Der Einsatz bekommt intern eine Nummer, so dass ich  ale drei Termine einem Einsatz zuordnen kann.
Nun kann ich natürlich die Nummer einfach fortlaufend machen. Dann habe ich natürlich schnell eine sehr lange Nummer.
Daher und damit ich ie Nummer einem Jahr zuordnen kann, habe ich die Jahreszahl hinzugefügt und möchte jedes Jahr bei 1 anfangen.

Also
2013
2013 1
2013 10
2013 11
2013 12

2013 2
2013 3

2012
2012 1
2012 10
2012 11
2012 2
2012 3
usw.

Das klappt. Nun habe ich allerdings ein Problem mit der Sortierung, sobald es mehr als 10 werden.
Aussehen sollte es natürlich:
2012 1
2012 2
2012 3

2012 9
2012 10
2012 11

2013 1
2013 2
2013 3
2013 4

2013 9
2013 10
2013 11
2013 12

Ich könnte natürlich auffüllen.
2013 001
2013 002
2013 003

Aber das sieht erstens blöd aus und zweitens müsste ich dann mit dem „+1“ tricksen. Nullen werden bei numerischen Einträgen nicht angezeigt.
Vor allem weiß ich nicht wieviele Nummern es max gibt. 1000, 100000,…

Zur Sicherheit müsste man dann
2013 000001
2013 000002
nehmen. Aber uU stößt  man bei anderer Gelegenheit wieder an die Grenzen.

Irgendeine Idee oder einen Ansatz? Spalten trenne habe ich Doppelte Sortierung (sort by YEAR(datum), nummer) probiert. Überlegung ist sowas wie eine Hilfsvariable.
andere müssten ein selbes Problem haben… Danke für Anregungen
Oliver

Hallo Oliver,

wenn in deiner Tabelle datumund nummer in separaten Spalten stehen, UND nummer einen numerischen Datentyp hat (Integer z.B.), dann muss
ORDER BY YEAR(datum), nummer
klappen. Egal ob es sich um eine SQL Datenbank oder Excel handelt.
Wenn dein Datentyp nicht numerisch ist, musst du das ändern.

Falls du Jahreszahl und Nummer in einem Feld hältst, wäre das auch kein Problem, sofern die Nummer direkt an die Jahreszahl angehangen ist, und dieser zusammengesetzte Wert wieder numerisch behandelt wird.
Wenn der Datentyp des zusammengesetzten Feldes String ist (implizit, wenn du z.B. ein Leerzeichen dazwischen hast), scheitert es. Weder Excel noch noch das ORDER BY einer SQL Datenbank kennen das „natural sort“, das du benötigst. Das gibt es nur in Programmiersprachen.
Dann müsstest du aus dem zusammengesetzten Wert wieder die Einzelwerte extrahieren - in MySQL z.B. mit der Funktion SUBSTRING. Leider liefert diese Funktion eben STRING, daher musst du das noch umwandeln. In MySQL am einfachsten durch Addition von 0.

Gruß
Thomas

Hallo Oliver,

ich schliesse mich Thomas mit einem Hinweis an.

Die Reihenfolge der Ausdrücke in der ‚Order By‘ - Klausel bestimmt die Reihenfolge der Sortierung. Wenn Du die Einsatznummern als Block haben willst muss die Einsatznummer in der ‚Order By‘ - Klausel vor dem Jahr stehen.

Bsp:
select id, YEAR(Datum),Nummer, Name from ua order by Nummer, Datum, Name

Grüße
Klaus