[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    2.044

    SQL Ergebniskette

    Hi *all

    geht das mit SQL ?

    Datei
    Code:
    NR     Name     Zahl
    10      Hugo         1
    10      Fritz        2
    10      Günter       1
    20      Willi        1
    Select "Wie auch immer" from datei where Nr = 10

    Ergebnis
    Hugo, Fritz, Günter In EINEM String

    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Ja, mit rekursievem CTE .
    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
    Jun 2001
    Beiträge
    2.044
    Baldur

    Du antwortest doch sonst nicht nach dem Motto:
    'Wissen sie wie spät es ist? ja"


    With a as select 'der erste name' from datei where nr = 10,
    b as select 'der nächste name' ...

    select a.Name concat b.name ... form a, b, ...

    DAS geht nicht
    Rekursive CTE ? schrei: Birgitta!
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Es gibt 3 Möglichkeiten:
    1. Rekursive CTE
    2. Hierachische Query Anweisung
    3. Handgestrickte UDF

    @1: RCTE
    Code:
    with x   as (SELECT ROW_NUMBER() over(partition by Key ORDER BY rrn(a)) Seq, 
                        a.*
                    FROM mytable a),
         Rec (Key, Value, Seq) 
             as (      select Key, x.Value, seq from x where Seq = 1
                 union all
                       select x.Key, x.Value concat ' ' concat Rec.Value,
                              Rec.Seq + 1
                          from x join Rec on x.Key = Rec.Key and x.Seq = Rec.seq + 1),
        y    as (select Key, Max(Seq) Seq from Rec group by Key)
    select rec.Key, Value 
    from rec join y Using (Key, Seq )
    @2: Hierarchische Query Anweisung (PTF TR3 7.1)
    Code:
    With x as (Select Row_Number() over(Order By Key, rrn(a)) seq, a.*
                 from mytable a), 
         y as (Select Key, sys_connect_by_path(Trim(Value), ' ') Text
                  from x
                  Start With Key = 1 and seq = 1
                  connect by Prior Seq = Seq - 1)
    Select Key, Max(Text) Text
    From y
    Group By Key;
    @3: UTF
    Habe ich gerade keine, aber der Key wird als Parameter übergeben und dann wird die Datei über Cursor für den Schlüssel-Wert verarbeitet und mit jedem Satz der aktuelle Wert zu dem Ausgabe-Feld hinzugefügt.

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zur hierarchischen Abfrabe habe ich auch ein Beispiel falls es dir weiter hilft:

    Code:
       NR   SUCH      
    1.000   Wandfarbe 
    1.000   Dispersion
    2.000   Lack      
    2.000   Kunstharz 
    1.000   Bla Bla   
    1.000   Noch was
    Code:
    Select Tree From 
    (
      select level , sys_connect_by_path (such, ' ')  tree    
      From 
      (                                                  
        Select 0 nr2, ' ' such , -1 root from sysibm/sysdummy1
        union                                                   
        Select nr2, such, nr2 - 1  root from 
        (Select row_number() over (order by nr) nr2, such from pranlib/t1 
         where nr = 1000 ) t3
      ) t2                                                    
      connect by prior root = nr2
    ) t1
    order by level desc
    fetch first row only ;
    Code:
    Noch was   Bla Bla    Dispersion Wandfarbe
    Allerdings ist hierfür die Bedingung WHERE NR = 1000 wichtig!
    Jedoch ist die RRN dafür egal.

    lg Andreas

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    2.044
    Birgitta vielen Dank

    Wie immer, schnell und kompetent


    Andreas,
    auch dir sei gedankt


    @alle
    Die hirachische Abfrage sieht am 'Einfachsten' aus

    Wie kann ich feststellen on der Kunde TR3 hat?
    Ist das bei regelmäßiger PTF Einspielung automatisch so (z.zt. aktuell ist ja schon TR5)
    Oder muß das seperat geordert werden (wie)
    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Eigentlich sollten die hierarchischen Query-Anweisungen mit dem aktuellen Release-Stand in Release 7.1 vorhanden sein.
    (Die RCTE gehen halt auch schon unter V5R4)

    Birgitta
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    425
    Hi,
    das finde ich SUUUUPER Interessant.
    nur verstehen tuh ich das nicht

    Ich habe nun bei mir

    Code:
    With x as (Select Row_Number() over(Order By kkmanr, rrn(a)) as seq, 
    a.*           from ankkop a where kkmanr = 1082),                    
     y as (Select kkmanr, sys_connect_by_path(Trim(digits(KKLFDN)), ' ') as Text 
                  from x                                                 
                  Start With kkmanr = 1082 and seq = 1                   
                  connect by Prior Seq = Seq - 1)                        
    Select kkmanr, Max(Text) Text                                        
    From y                                                               
    Group By kkmanr

    um alle kklfdn hintereinander zu bekommen, die der kkmanr= 1082 hat.

    das Ergebnis ist aber
    Code:
     MANDANTEN-NR  TEXT    
           1.082   *POINTER
    Was mach ich falsch?

    Danke
    der ILEMax

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Was mach ich falsch?
    Du verwendest STRSQL!
    Das Ergebnis aus sys_connect_by_path() ist ein Large Object. Large Objects können nur mit System-i-Navigator angezeigt werden. Anderenfalls must Du das Ergebnis in CHAR oder VARCHAR umwandeln.

    Birgitta
    Birgitta Hauser

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

  10. #10
    Registriert seit
    Sep 2005
    Beiträge
    425
    ich hab das
    Code:
    sys_connect_by_path(Trim(digits(KKLFDN)), ' ') as Text
    geändert in
    Code:
    char(sys_connect_by_path(Trim(digits(KKLFDN)), ' ')) as Text
    und bekomme
    Code:
     Ergebnis zu lang.
    als Meldung, (auch bei varchar)

    obwohl nur 3 Werte a 7 byte vorhanden sind

    ILEMax

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508

  12. #12
    Registriert seit
    Sep 2005
    Beiträge
    425
    nö, immer 'Ergebnis zu lang'

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
  •