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

    SQL - Zeilen in Spalten

    Hallo *all

    hab mal wieder eine SQL-Frage

    habe eine Tabel die ungefähr wie folgt aus sieht:

    PHP-Code:
     WERKNR    SA   TEXT

    7500691   AU   Zylinder
    7500691   AU   Hand
    7500691   AU   Papierstau
    .                
    7500691   KR   Anruf  
    7500691   KR   ebenso       
    7500691   KR   Info 
    7500691   KR   Bürste        
    7500691   MA   nachgeschickt
    7500691   MA   neu 
    ich bräuchte diese Daten jetzt aber so:
    PHP-Code:
    Feld1      Feld2  Feld3        Feld4   Feld5    Feld6  Feld7    Feld8          Feld9

    Zylinder   Hand   Papierstau   Anruf   Ebenso   Info   Bürste   nachgeschickt  neu 
    die Zeilenzahl kann variieren
    d.h. es können mal bei "AU" eine aber auch mal sieben Sätze vorhanden sein!sein! Ebenso bei "KR" bzw. "MA"

    Diese Abfrage soll anschließend noch mit Join, mit einer anderen Tabelle (über WERKNR) verknüpft werden!

  2. #2
    cbe is offline [professional_User]
    Registriert seit
    May 2005
    Beiträge
    392
    furchtbar.

    Wie willst du denn die Datei weiterverarbeiten, wenn die Spaltenzahl variabel ist?

    Wenn es z.B. als CSV verschickt wird, würde ich einfach ein RPG schreiben, das die Sätze liest und mit CAT aneinanderhängt.
    Kann dann mit CPY2STMF oder FTP oder sonstwie weiterverarbeitet werden.

    Sag doch mal mehr dazu.
    Und gibt es in der urspr. Tabelle auch eine Sortierung oder ist die sequenziell zufällig?

    Gruß, Christian

  3. #3
    Registriert seit
    Nov 2006
    Beiträge
    102

    Stimmt die Formatierung?

    Ich kann Dir nicht ganz folgen. Willst Du keine Gruppierung/Sortierung? Einfach alle TEXT-Spalten nebeneinander in einer Zeile, so wie es jetzt dargestellt ist?

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    309
    bei folgendem Select
    PHP-Code:
    Select from MyFile where WERKNR 7500691
    erhalte ich alles was zur Werknummer 7500691 gehört
    (siehe PHP-Code 1)!

    ich brächte aber alle "TEXT"-Inhalte zu dieser Werknr. in einer Zeile angeordnet
    (siehe PHP-Code 2)!

  5. #5
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Wenn du die maximale Anzahl an Wiederholungen kennst, kannst du es vielleicht so versuchen:
    PHP-Code:
    SELECT A.TEXTB.TEXTC.TEXTD.TEXT,
           
    E.TEXTF.TEXTG.TEXTH.TEXTI.TEXT
    FROM 
    (
    SELECT     MIN(RRN(A)) AS MINA,
               
    MIN(RRN(B)) AS MINB,
               
    MIN(RRN(C)) AS MINC,
               
    MIN(RRN(D)) AS MIND,
               
    MIN(RRN(E)) AS MINE,
               
    MIN(RRN(F)) AS MINF,
               
    MIN(RRN(G)) AS MING,
               
    MIN(RRN(H)) AS MINH,
               
    MIN(RRN(I)) AS MINI
               FROM ROWCOL 
    AS A
    LEFT OUTER JOIN ROWCOL 
    AS B ON RRN(B)>RRN(A)
    LEFT OUTER JOIN ROWCOL AS C ON RRN(C)>RRN(B)
    LEFT OUTER JOIN ROWCOL AS D ON RRN(D)>RRN(C)
    LEFT OUTER JOIN ROWCOL AS E ON RRN(E)>RRN(D)
    LEFT OUTER JOIN ROWCOL AS F ON RRN(F)>RRN(E)
    LEFT OUTER JOIN ROWCOL AS G ON RRN(G)>RRN(F)
    LEFT OUTER JOIN ROWCOL AS H ON RRN(H)>RRN(G)
    LEFT OUTER JOIN ROWCOL AS I ON RRN(I)>RRN(H)
    ) AS 
    MIN
    LEFT OUTER JOIN ROWCOL 
    AS A ON RRN(A)=MINA
    LEFT OUTER JOIN ROWCOL 
    AS B ON RRN(B)=MINB
    LEFT OUTER JOIN ROWCOL 
    AS C ON RRN(C)=MINC
    LEFT OUTER JOIN ROWCOL 
    AS D ON RRN(D)=MIND
    LEFT OUTER JOIN ROWCOL 
    AS E ON RRN(E)=MINE
    LEFT OUTER JOIN ROWCOL 
    AS F ON RRN(F)=MINF
    LEFT OUTER JOIN ROWCOL 
    AS G ON RRN(G)=MING
    LEFT OUTER JOIN ROWCOL 
    AS H ON RRN(H)=MINH
    LEFT OUTER JOIN ROWCOL 
    AS I ON RRN(I)=MINI 

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    309
    die max. Anzahl ist mir leider nicht bekannt! :-(

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    309
    dachte da irgendwie so in der Art!

    PHP-Code:
    select a.WERKNR,a.TEXT,b.TEXT,c.TEXT
      from MyFile a
    MyFile bMyFile c           
        where 
    (a.WERKNR b.WERKNR and b.WERKNR c.WERKNR) and a.WERKNR '7500691' 

  8. #8
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Hallo,

    wenn die Anzahl der Vorkommen nicht feststeht hast Du mit einer Tabelle schlechte Karten, da Du eine feste Anzahl Spalten definieren musst. Das einzige was Du machen kannst ist die einzelnen Texte in einem String aufzubereiten und dann in einem einzigen Feld ausgeben. Dies kann mit einer selbstgestrickten SQL-Funktion realisiert werden.

    Beispiel:
    PHP-Code:
    CREATE FUNCTION MySchema/MyFunc 
        
    PARWerkNr Char(10), ParSA Char(2) ) 
        
    RETURNS VARCHAR(1024)   
        
    LANGUAGE SQL 
        NOT DETERMINISTIC 
        READS SQL DATA 
        CALLED ON NULL INPUT 
    BEGIN 
       
    DECLARE RETURNVAL VARCHAR 1024 NOT NULL DEFAULT ' ' 
       FOR 
    CSRC1 AS C1 CURSOR 
           
    FOR SELECT Text 
                  FROM MyTable 
                  WHERE     WerkNr 
    PARWerkNr 
                        
    and SA     ParSA
           
    DO SET ReturnVal ReturnVal CONCAT ' ' CONCAT CsrC1.Text
       
    END FOR ; 
       RETURN 
    LTRIM(ReturnVal) ; 
    END
    Die Funktion kann wie folgt verwendet werden:
    PHP-Code:
    Select Distinct WerkNrSAMyFunc(WerkNrSA)
    From MyTable
    Where WerkNr 
    '4711'
    Das Ergebnis sollte in etwa so aussehen:
    PHP-Code:
    WerkNr    SA   Text
    7500691   AU   Zylinder        Hand       Papierstau
    7500691   KR   Anruf           ebenso     Info          Bürste
    7500691   MA   nachgeschickt   neu 
    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

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    309
    schaut ja schon mal nicht schlecht aus! *fg

    kann man die Funktion jetzt noch so machen, daß ich nur eine Zeile bekomme!

    WERKNR & SA interessieren mich nicht

    PHP-Code:
    Textfeld1                            Textfeld2                              Textfeld 3
    Zylinder   Hand   Papierstau         Anruf   ebenso   Info   Bürste         nachgeschickt     neu 

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ist denn die Anzahl der Begriffe wenigstens bekannt ?
    Dann könntest du folgenden Select stricken:

    select Text, ' ', ' ', ... from File
    where Text = 'Begriff1'
    union [all]
    select ' ', Text, ' ', ... from File
    where Text = 'Begriff2'
    union [all]
    select ' ', ' ', Text, ... from File
    where Text = 'Begriff3'

    Dies ist entsprechend der Anzahl möglicher Begriffe zu erweitern.
    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

  11. #11
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von muadeep Beitrag anzeigen
    kann man die Funktion jetzt noch so machen, daß ich nur eine Zeile bekomme!
    Du meinst, dass Du eine Zeile erhälst, in der alle Ausprägungen drinstehen? Egal für welche WerksNr und egal für welche SA?

    Dann erstell die Funktion doch ohne Parameter, nimm' die Where-Bedingung im Select raus und ruf die Funktion ohne Parameter auf.

    @Fuerchau
    Baldur, Dir ist schon klar, das Du mit jedem Sub-Select mindestens eine Zeile generierst?
    ... anstatt alles in einer Zeile unterzubringen.

    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

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... leg doch den Bildschirm einfach auf die Seite, oder den Kopf auf den Schreibtisch

    D*B,
    der SQL UHL (unstructured Huddle Language) nennen würde, wenn das ginge...
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

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
  •