-
 Zitat von Fuerchau
Das ergibt sich doch im Ausdruck, da du doch keine neue Sortierung vorgibst als die Kunden-Nr.!
Die Reihenfolge im In-Ausdruck spielt überhaupt keine Rolle. Hier wird eine sequentielle Prüfung der Werte vorgenommen.
Was diesen Ausdruck angeht:
order by Case When Kdnr = 50 Then KdNr End,
Case When KdNr = 1 Then KdNr End, ...
So ist er im Moment wohl noch richtig, da der Default beim "Order By" "NULLS LAST" ist und dieses Verhalten nicht beeinflusst werden kann. Dies könnte mit dem nächsten Release geändert werden, dann stimmt der Sort nicht mehr. Bei OLAP-Funktionen ist die Angabe schon möglich.
... derANSI Standard erlaubt durchaus Sortierungen nach abgeleiteten Feldern (Ausdrücken) und (idiotischerweise) nach Feldern, die nicht im Resultset enthalten sind. Die Behandlung der Nullvalues ist nur geregelt, wenn die entsprechende Clause (Null first oder Null last) das regelt, ansonsten ist das Implementierungs spezifisch und sollte vermieden werden.
Dass diese Sortierung nach einem Case Ausdruck Käse ist, erkennt man daran, dass bei neu dazu kommenden Artrikeln SQL Statements angepasst werden müssen (order by in Views ist nicht ANSI konform und kann sich mithin künftig ändern). Ich bezweifle auch stark, dass ein Order by nach einem Case Konstrukt im richtigen Leben für entsprechende Datenmengen vernünftig skaliert und mit einem Index ausreichend gestützt werden kann.
Summa Summarum rate ich von diesem Ansatz ernstlich ab!!!
D*B
-
Vielen Dank für die vielen Antworten.
Ich werde dann wohl die letzte Version von H. Fuerchau verwenden. Sieht für mich am Besten aus.
Anmerkung zu Fuerchau vom 05-09-14, 14:43: Die Kundennummern habe ich aus unserem System herausgesucht. Wir haben nicht alle Ortsteile gespeichert und dadurch kann ich die vorgegebene Sortierung der Excel-Tabelle nicht realisieren. Da es ja eine vorgegebene Tabelle mit Tabellenschutz ist, kann ich auch nicht einfach die Kundennummern in die Tabelle eintragen (müsste ich dann auch alle 3 Monate machen). Wenn ich aber die Sortierung direkt im SQL-Befehl hinbekomme, brauche ich die Daten nur alle 3 Monate per Drag & Drop in die Zellen kopieren und bin mit der Aufgabe am schnellsten fertig.
Schönen Gruß
Artur
-
Wo kann man denn das nachlesen, wie das mit den Ausdrücken im ORDER BY funktioniert?
-
SQL-Reference, Stichwort "Order By Clause".
Das selbe gilt übrigens auch bei "Group by", wobei hier der Unterschied besteht, dass der Ausdruck identisch im Select stehen muss.
Deshalb ist es gedanklich häufig einfacher einen
"select * from (select f1, f2, Ausdruck as f3....) Hugo order by f1, f2, f3"
zu kodieren auch wenn es im Endeffekt egal ist.
Je nach Dialekt und AS/400-Version ist ein Ausdruck in Order By nur erlaubt, wenn dieser auch im Select steht.
Ein Order-Feld, das nicht im Select steht ist erst seit V5R3 erlaubt und andere Dialekte erlauben es ggf. gar nicht.
Ich weiß auch nicht, wie SQL nun reagiert wenn ich folgendes mache (keine Lust zum Probieren):
select f1, f2, f3 from myfile
order by f1, 2, 10
Mit "2" wird das 2. Feld der Select-Liste benannt, mit "10" müsste nun ein Ausdruck angenommen werden da Feld 10 nicht existiert.
-
 Zitat von Fuerchau
Ich weiß auch nicht, wie SQL nun reagiert wenn ich folgendes mache (keine Lust zum Probieren):
select f1, f2, f3 from myfile
order by f1, 2, 10
Mit "2" wird das 2. Feld der Select-Liste benannt, mit "10" müsste nun ein Ausdruck angenommen werden da Feld 10 nicht existiert.
Habe es eben ausprobiert. Es funktioniert nicht. SQL "denkt" bei den Zahlen immer an Spaltennummern. Sobald die "10" erkannt wird, bricht die Verarbeitung mit Fehler [SQL0125] ab.
-
 Zitat von Fuerchau
Und schon wieder falsch:
Wenn ich das kurz korrigieren darf  ?
order by Case Kdnr
when = 50 Then 1
When 1 Then 2
When 10 Then 3
When 8 Then 4
When 60 Then 5
When 5 Then 6 End
Diese Variante funktioniert auch in meinem Sinne (gerade getestet). Die Sätze kommen in der Reihenfolge 50, 1, 10, 8, 60, 5
-
 Zitat von B.Hauser
Man kann aber auch wie folgt nach den unterschiedlichen Kunden-Nr. sortieren (dabei muss man nur ein bisschen tippen):
Code:
select kdnr, name, ort, umsatz
from kundenstamm
where kdnr in (50, 1, 10, 8, 60, 5)
order by Case When Kdnr = 50 Then KdNr End,
Case When KdNr = 1 Then KdNr End,
Case When KdNr = 10 Then KdNr End,
Case When KdNr = 8 Then KdNr End,
Case When KdNr = 60 Then KdNr End,
Case When KdNr = 5 Then KdNr End;
Birgitta
Diese Variante funktioniert in meinem Sinne. Habe es eben getestet. Die Sätze kommen wirklich in der Reihenfolge 50, 1, 10, 8, 60, 5.
Similar Threads
-
By KingofKning in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 07-07-14, 15:15
-
By alexk2013 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 14-05-14, 13:33
-
By TARASIK in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 26-03-03, 11:03
-
By Sascha Storzum in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 22-08-02, 08:37
-
By qiwi2000 in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 26-04-02, 08:51
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks