-
SQL: Sortierung individuell nach einer Werte-Tabelle
Hallo SQL-Fachleute,
ich soll für einen Mandaten die Kundenumsätze melden und in seine Excel-Tabelle eintragen. Leider ist seine Tabelle alphabetisch nach Ortsteilen sortiert und mit unseren Stammdaten gar nicht vereinbar. Nun meine Frage:
Gibt es die Möglichkeit, die Sortierung einer SELECT-Anweisung über eine Werte-Tabelle vorzunehmen? Ungefähr in der Art:
Code:
select kdnr, name, ort, umsatz
from kundenstamm
where kdnr in (50, 1, 10, 8, 60, 5)
order by (50, 1, 10, 8, 60, 5)
Ich möchte die Kundennummern also in der Reihenfolge bekommen, wie ich sie in der Werte-Tabelle angegeben habe.
Danke für eure Hilfe.
Gruß
Artur
-
Order By kann nur nach Wert sortieren.
Du musst also eine alternative Wertigkeit generieren (in einer Tabelle oder per Ausdruck):
case kdnr
when 50 then 1
when 1 then 2
:
end
Allerdings ist dies der falsche Ansatz.
Lade die Daten ganz normal in ein neues Excelblatt (Sortierung ist egal!).
Über die Excel-Formel SVERWEIS kannst du die passenden Werte dann ermitteln.
-
O.k., das mit dem Wert generieren hört sich gut an. Sind zwar um die 50 Kunden, aber das lässt sich ja noch bewerkstelligen.
SVERWEIS funktioniert leider nicht, da unsere Kundennr. nicht in der Exel-Tabelle des Mandanten enthalten ist und über den Kundennamen des Mandanten kann ich nicht verweisen, da unsere Kundennamen ganz anders lauten. Aber die Idee mit dem CASE-Befehl finde ich gut. Werde das so umsetzen. Dann brauche ich die Daten nur noch per Drag & Drop in die Tabelle einfügen und fertig ist die Umsatz-Tabelle.
Danke für deine Hilfe.
Gruß
Artur
-
Aber irgendwo musst du die Kunden-Nr'n doch her haben.
Trage die doch in die Excel-Tabelle nach.
Aber wie auch immer, es gibt viele Lösungen ;-).
-
create table kdsort (kunde int, nummer int);
insert into kdsort values(50, 1);
insert into kdsort values(1, 2);
insert into kdsort values(10, 3);
...
insert into kdsort values(5, 6);
select * from ...
join kdsort on kdnr = kunde
order by nummer
-
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
-
Wenn ich das kurz korrigieren darf?
order by Case When Kdnr = 50 Then 1 End,
Case When KdNr = 1 Then 2 End,
Case When KdNr = 10 Then 3 End,
Case When KdNr = 8 Then 4 End,
Case When KdNr = 60 Then 5 End,
Case When KdNr = 5 Then 6 End;
-
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
-
Man kann es einfacher machen, indem man alles in einem Statement zusammenfasst.
... aber mein Statement war sicher nicht falsch. Probier's aus wenn Du es nicht glaubst.
Die Sortierung Kunden-Nr. erfolgt nur bei z.B. KundenNr = 50 alles andere wird ignoriert.
Man könnte die Case-Anweisung sogar noch weiter treiben, in dem man bei untershiedlichen Kunden-Nr. jeweils nach unterschiedlichen Spalten sortiert (vorausgesetzt diese Spalten sind vom Datentyp her kompatibel - vielleicht gilt diese Beschränkung aber nicht mehr im neuen Release).
z.B.
Code:
Order By Case When KndNr in (50, 3, 18) Then KndNr
When KndNr in (23, 17, 5) Then ArtikelNr
Else AnderesFeld End
Birgitta
-
Zitat von B.Hauser
Man kann es einfacher machen, indem man alles in einem Statement zusammenfasst.
... aber mein Statement war sicher nicht falsch. Probier's aus wenn Du es nicht glaubst.
Die Sortierung Kunden-Nr. erfolgt nur bei z.B. KundenNr = 50 alles andere wird ignoriert.
Man könnte die Case-Anweisung sogar noch weiter treiben, in dem man bei untershiedlichen Kunden-Nr. jeweils nach unterschiedlichen Spalten sortiert (vorausgesetzt diese Spalten sind vom Datentyp her kompatibel - vielleicht gilt diese Beschränkung aber nicht mehr im neuen Release).
z.B.
Code:
Order By Case When KndNr in (50, 3, 18) Then KndNr
When KndNr in (23, 17, 5) Then ArtikelNr
Else AnderesFeld End
Birgitta
Diese Idee fände ich am Besten, sie funktioniert aber nicht so, wie ich es brauche. Wenn ich das so mache, dann werden die Kundennummern einfach wieder aufsteigend sortiert (habe es eben getestet). Ich brauche sie aber nicht aufsteigend, sondern in meiner ganz individuellen Reihenfolge.
Gruß
Artur
-
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.
-
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.
Das glaube ich kaum, da sonst u.a. die Sortierung beim Multi-dimensionalen Grouping nicht mehr funktionieren würde. Da wird davon ausgegangen, dass in der "Gruppen-Wechsel Spalte" für die Summen-Zeile NULL steht, wodurch die Summe ans Ende sortiert wird.
Die Aggregat-Funktion GROUPING würde ebenfalls nicht funktionieren.
Ähnliche Probleme würden bei den Rekursiven Abfragen und hierarchischen Query-Anweisungen auftreten.
OLAP-Funktionen haben einen individuellen Order By.
Auf alle Fälle gehe ich nicht davon aus, dass der DEFAULT geändert wird. ggf. kann durch eine entsprechende Sortierreihenfolge das Verhalten beeinflusst werden.
Birgitta
Similar Threads
-
By KingofKning in forum IBM i Hauptforum
Antworten: 9
Letzter Beitrag: 07-07-14, 14:15
-
By alexk2013 in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 14-05-14, 12:33
-
By TARASIK in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 26-03-03, 10:03
-
By Sascha Storzum in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 22-08-02, 07:37
-
By qiwi2000 in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 26-04-02, 07: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