Neuigkeiten:

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

Mobiles Hauptmenü

ORDER BY sortiert alphanumerisch

Begonnen von gilles_de_rais, November 16, 2017, 16:11:32

⏪ vorheriges - nächstes ⏩

gilles_de_rais

Hallo,

sicher ganz einfach, ich finde die Lösung - die ja eigentlich nicht schwer sein kann - nicht.

Und zwar habe ich ein abhängiges Kombi, das Kalenderwochen enthält. Diese sind leider alphanumerisch (also 1, 10, 12, 2) sortiert. Wie bekomme ich es hin, dass numerisch (also 1, 2, 3) aufgelistet wird? ORDER BY hilft hier ohne weiteren Zusatz nicht viel weiter.

VG
Dennis

MzKlMu

Hallo,
...Order By CInt(Kalenderwochen)

Wenn die Kalenderwochen von einem Datum abgeleitet werden, kannst Du auch das Datum zum Sortieren verwenden.

Wie kommst Du auf die Kalenderwochen als Text ?
Gruß Klaus

gilles_de_rais

Hi,
nein, habe die Kalenderwochen nicht als Text, aber SELECT DISTINCT zuvor angewendet, weshalb ich nicht sortieren kann.

Lasse ich DISTINCT weg, kann ich in der Tat sehr gut via Datum sortieren.

gilles_de_rais

Vielleicht liegt es auch daran, dass ich die abhängigen Kombis Ihre Daten alle aus einer einzigen Abfrage beziehen lasse.

Mein Code sieht wie folgt aus. Hier allerdings mit Monatsnamen und nicht mit Kalenderwochen. Trotzdem die gleiche Problematik:

Private Sub cboJahr_AfterUpdate()
strSQL = " SELECT DISTINCT wart_monnam FROM qryWartungen " & _
          " WHERE wart_jahr = " & Nz(Me.cboJahr, 0) & _
          " ORDER BY wart_datum "
         
strSQL1 = "SELECT bahn_name, wart_jahr, wart_kw, wart_monnam, aus_art " & _
          "FROM qryWartungen WHERE wart_jahr = " & Nz(Me.cboJahr, 0) & _
          "AND bahn_id = " & Nz(Me.cboBahnen, 0)

cboMonat.RowSourceType = "Table/Query"
cboMonat.RowSource = strSQL

lstWartungen.RowSourceType = "Table/Query"
lstWartungen.RowSource = strSQL1
End Sub

MzKlMu

Hallo,
im gezeigten Code gibt es keinen Hinweis wie die Monatsnamen (bzw. KW) entstehen undd as war ja die Frage.

Aber sortiere wie gesagt nach nur dem Datum dann stimmt auch KW und Monat automatisch. Sowohl Monat und KW sind ja genau so aufsteigend wie das Datum.
Gruß Klaus

gilles_de_rais

Hallo,

Monatsnamen und KW entstehen mittels
wart_monnam: Format(DatSeriell(1;ZInteger([wart_monat]);1);"mmmm")
und
wart_kw: Format([wart_datum];"ww";1;1)
in der Abfrage.

Ich habe zusätzlich wart_monat: Monat([wart_datum]) in der Abfrage. NAch Anpassung des Codes klappt die Sortierung nach Monatsnamen auch mit DISTINCT.

Private Sub cboJahr_AfterUpdate()
strSQL = " SELECT DISTINCT wart_monnam, wart_monat FROM qryWartungen " & _
          " WHERE wart_jahr = " & Nz(Me.cboJahr, 0) & _
          " ORDER BY wart_monat "
         
strSQL1 = "SELECT bahn_name, wart_jahr, wart_kw, wart_monnam, aus_art " & _
          "FROM qryWartungen WHERE wart_jahr = " & Nz(Me.cboJahr, 0) & _
          "AND bahn_id = " & Nz(Me.cboBahnen, 0)

cboMonat.RowSourceType = "Table/Query"
cboMonat.RowSource = strSQL

lstWartungen.RowSourceType = "Table/Query"
lstWartungen.RowSource = strSQL1
End Sub


Ich nehme an, ähnlich wird es dann auch mit Kalenderwochen klappen.

Vielen Dank für Deinen Rat!

MzKlMu

Hallo,
mit den KW geht das nicht.
Wie es mit den KW geht hatte ich in #1 schon geschrieben.

Übrigens, wenn Du die europäischen KW brauchst ist Deine Formel falsch.
Das wäre dann so:
Format([wart_datum];"ww";2;2)
Gruß Klaus

ebs17

Die Formatfunktion erzeugt Text, DatePart mit vielen identischen Möglichkeiten gleich eine Ganzzahl.

Für höhere Ansprüche wird man dann mit einer Kalendertabelle oder entsprechenden Abwandlungen, die unmittelbar Monate, Kalenderwochen usw. liefern, arbeiten wobei man auch dort auf Ganzzahlen orientieren wird, schon weil Zahlen schneller verarbeitet werden als gleichartige Texte.
Mit freundlichem Glück Auf!

Eberhard

gilles_de_rais

Hallo,
sortieren nach Datum funktioniert glaube ich nicht, da ich zuvor DISTINCT angewendet habe. Das ist mein Problem. Dass FORMAT Text ausgibt, wusste ich beispielsweise nicht. Guter Hinweis.

Ich gucke mir die Sache nochmal genau unter Berücksichtigung Eurer Hinweise an und löchere Euch ggf. danach nochmal.

Bis hier schon einmal recht herzlichen Dank!

gilles_de_rais

Prima! DatTeil war des Rätsels Lösung. Für die Zukunft werde ich mir dann wohl eher diesen Befehl näher ansehen müssen.

Was genau ist mit Kalendertabelle gemeint?

Viele Grüße,
Dennis

ebs17

Mit freundlichem Glück Auf!

Eberhard

astropfr

Wenn ich Zahlen, die als Text gespeichert sind, numerisch sortieren will, wie hier z.B. Kalenderwochen, dann muss ich nur dafür sorgen, dass die Werte 2-stellig sind: so z.B. KW_ergänzt = Right("00" & KW, 2)
KW_ergänzt kann nun numerisch sortiert werden.
Oder als SQL in Jet-SQL: ORDER BY Right("00" & [KW]; 2) ASC

DF6GL

Hallo,

oder gleich richtig zu numerisch konvertieren:

ORDER BY Clng([KW]) ASC
ORDER BY Val([KW]) ASC

ebs17

ZitatWenn ich Zahlen, die als Text gespeichert sind, numerisch sortieren will
Was ist der besondere Grund, Zahlen als Text zu speichern?
Blödsinn, den man nicht macht, muss man nicht behandeln.
=> Zahlen kann der Rechner einfacher und schneller verarbeiten als Texte, vergleiche Binärsystem, auf dem der ganze Kram beruht und das man in der Schule schon mal kennengelernt haben dürfte.
=> Eine Sortierung auf ein pures Feld (ohne Berechnung) könnte einen Index benutzen und somit deutlich schneller laufen.

So sieht es aber bedeutsamer aus und läuft angemessen länger. Das sind auch Werte ...
Mit freundlichem Glück Auf!

Eberhard