[NEWSboard IBMi Forum]
  1. #1
    Joe is offline [professional_User]
    Registriert seit
    Mar 2001
    Beiträge
    365

    Sortieren mit SQL

    Hallo Forum
    Die folgende Subfile soll in SQLRPGLE nach Betrag aufsteigen oder absteigend sortiert werden.
    Dabei ist die jeweils niedrigste "Stufe2" aller Sätze massgebend. Die Sortierung soll aber auch
    innerhalb der gleichen "Stufe1" wirken.
    Dazu gebe ich eine Tabelle mit gleichem Aufbau aus die nach dem sortieren wieder eingelesen und angezeigt wird.

    PHP-Code:
    Stufe1 Stufe2    Krit                   BETRAG 
    1           4        
    ||||Artikel 55          2,81  
    1           4        
    ||||Artikel 56         85,00  
    1           4        
    ||||Artikel 57         41,94  
    1           4        
    ||||Artikel 58         41,38  
    1           3        
    |||Auftragsart 50  171,13  
    1           2        
    ||Monat 01          171,13  
    1           1        
    |Kunde 1100        171,13  

    2           4        
    ||||Artikel 40         20,08 
    2           4        
    ||||Artikel 41        100,42 
    2           4        
    ||||Artikel 56         59,46  
    2           3        
    |||Auftragsart 01  179,96  
    2           2        
    ||Monat 01          179,96  
    2           1        
    |Kunde 1101         179,96  



    nach der Sortierung soll das so aussehen

    Stufe1 Stufe2 Krit                   BETRAG 
    2        4        
    ||||Artikel 41       100,42 
    2        4        
    ||||Artikel 56        59,46
    2        4        
    ||||Artikel 40        20,08 
    2        3        
    |||Auftragsart 01  179,96  
    2        2        
    ||Monat 01          179,96  
    2        1        
    |Kunde 1101         179,96  


    1        4        
    ||||Artikel 56         85,00  
    1        4        
    ||||Artikel 57         41,94  
    1        4        
    ||||Artikel 58         41,38
    1        4        
    ||||Artikel 55           2,81    
    1        3        
    |||Auftragsart 50  171,13  
    1        2        
    ||Monat 01          171,13  
    1        1        
    |Kunde 1100         171,13 
    Wie bekomme ich das mit einer dynamischen sqL-Anweisung hin?

    Gruß Joe[/FONT]

  2. #2
    Registriert seit
    Apr 2004
    Beiträge
    105
    Meinst du vielleicht:

    1. Sortierung
    PHP-Code:
    Select FeldAFeldBFeldC, ...
    From TabelleA
    Where 
    ...
    Order by 1 asc2 desc 
    2. Sortierung
    PHP-Code:
    Select FeldAFeldBFeldC, ...
    From TabelleA
    Where 
    ...
    Order by 1 desc2 desc 
    1. Du erstellst das SQL-Select-Statement als String.
    MySQLStm = 'SELECT ..... '
    2. Du generierst ein ausführbares SQL-Statement über den SQL Prepare-Befehl:
    /EXEC SQL Prepare MySQLCmd from :MySQLStm
    /END-EXEC
    3. Du deklarierst einen Cursor, in dem Du statt des SQL-Statements den aufbereiteten SQL-Command angibst:
    /EXEC SQL Declare MyCursor For MySQLCMD
    /END-EXEC

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.245
    Das Problem hier ist eher die 2-stufige Sortierung.

    Hierfür musst du ein temporäres Zwischenergebnis erstellen, dass du dann für die Sortierung wieder verknüpfst:

    with
    xGroupSum as (
    select kunde, sum(Umsatz) as GUmsatz
    from MyFile
    group by Kunde)

    select a.Kunde, Artikel, min(GUmsatz) as GUmsatz, sum(Umsatz) as AUmsatz A
    from myfile inner join xGroupSum B on a.Kunde=B.Kunde
    group by Kunde, Artikel
    order by GUmsatz, AUmsatz, Kunde

    Je nach Schachtelungstiefe benötigst du entsprechend viele Zwischenergebnisse und Verknüpfungen.

    Performance ?
    Naja, das muss man ausprobieren.
    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

  4. #4
    Joe is offline [professional_User]
    Registriert seit
    Mar 2001
    Beiträge
    365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das Problem hier ist eher die 2-stufige Sortierung.

    Hierfür musst du ein temporäres Zwischenergebnis erstellen, dass du dann für die Sortierung wieder verknüpfst:

    with
    xGroupSum as (
    select kunde, sum(Umsatz) as GUmsatz
    from MyFile
    group by Kunde)

    select a.Kunde, Artikel, min(GUmsatz) as GUmsatz, sum(Umsatz) as AUmsatz A
    from myfile inner join xGroupSum B on a.Kunde=B.Kunde
    group by Kunde, Artikel
    order by GUmsatz, AUmsatz, Kunde

    Je nach Schachtelungstiefe benötigst du entsprechend viele Zwischenergebnisse und Verknüpfungen.

    Performance ?
    Naja, das muss man ausprobieren.
    Vielen Dank für den Lösungsansatz.

    Da die Schachtelungstiefe > 30 sein kann, habe ich mich für
    eine "abgespeckte" Version entschieden bei der der Benutzer die Sortierstufe vorgibt. Nur diese wird dann verwendet und angezeigt.

    Gruß Joe

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •