[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jul 2007
    Beiträge
    30

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jul 2007
    Beiträge
    30
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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 ;-).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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;
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  10. #10
    Registriert seit
    Jul 2007
    Beiträge
    30
    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

  11. #11
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    Wo kann man denn das nachlesen, wie das mit den Ausdrücken im ORDER BY funktioniert?

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Performance Werte V5R4
    By KingofKning in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 07-07-14, 15:15
  2. UPDDTA und Null-Werte
    By alexk2013 in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-05-14, 13:33
  3. Tabelle aus QSYS.LIB nach QDLS kopieren
    By TARASIK in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 26-03-03, 11:03
  4. Berechtigung zum Updaten einer Tabelle
    By Sascha Storzum in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 22-08-02, 08:37
  5. Query 0-Werte Ausgeben???
    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
  •