[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.114

    SQL Daten nebeneinander

    Hallo *all,

    ich habe hier unter V5R4 eine Datei mit Planzahlen.
    Aufbau ist Monat Kunde Ist Plan

    Ich habe hier also für jeden Kunden 12 Einträge.

    Ich muß eine Schnittstelle füllen, wo der Aufbau aber Kunde Ist Plan Ist Plan Ist Plan.... lautet. Sprich statt 12 Zeilen für einen Kunden brauche ich eine Zeile mit den 12 Werten nebeneinander.
    Ich würde die Werte dann mit Substr in eine neue Datei schreiben wollen.

    Wie gehe ich dann mit SQL am besten vor?

    GG

    (Wobei wir das Thema aber schonmal hatten, ich finde es nur nicht auf Anhieb)

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    ich hatte einmal diese Anforderung bei einem Kunden.
    Du müsstest auf die Tabelle wo sich die IST und PLAN Daten befinden mittels JOIN mehrfach darauf zugreifen.

    Gibt aber auch andere Lösungen wenn das SQL nicht zu kompliziert sein soll.
    Z.B. Globale Temporäre Tabelle mit einem kleinen Programm befüllen.

    lg Andreas

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    ... in dem Du eine Case-Anweisung verwendest etwa so:

    Code:
    Select Kunde, 
          Sum(Case When Monat = 1 Then PlanWert Else 0 End) PlanJan,
          Sum(Case When Monat = 1 THen IstWert Else 0 End) IstJan,
          Sum(Case When Monat = 2 Then PlanWert Else 0 End) PlanFeb,
          Sum(Case When Monat = 2 Then IstWert Else 0 End) IstFeb, ...
    From YourTable
    Where ...
    Group By Kunde;
    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

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Hallo,
    danke für den Hinweis, hatte jetzt mal im Forum weitergestöbert und Deine function gefunden.
    Habe die mal angepasst.

    CREATE FUNCTION plan ( PARARTNR CHAR(5) ) RETURNS
    VARCHAR(1024) LANGUAGE SQL READS SQL DATA BEGIN
    DECLARE RETURNVAL VARCHAR ( 1024 ) NOT NULL DEFAULT ' ' ;

    FOR CSRC1 AS C1 CURSOR
    FOR SELECT plan, ist
    FROM aruba_msvc/planz
    WHERE knd = PARARTNR
    DO SET RETURNVAL = RETURNVAL CONCAT ' ' CONCAT
    VarChar(CSRC1.plan) ;
    END FOR ;
    end

    und wenn ich die jetzt aufrufe mit

    select adkto, plan(adkto) from adr01pf

    bekomme ich den fehler
    Nachrichten-ID . . . . : SQL0204 Bewertung . . . . . . :
    Nachrichtenart . . . . : Diagnose

    Nachricht . . . : PLAN der Art *N in *LIBL nicht gefunden.
    Ursache . . . . : PLAN der Art *N in *LIBL wurde nicht gefunden.

    Was läuft hier falsch?

    GG

  5. #5
    Registriert seit
    Jan 2001
    Beiträge
    850
    Zitat Zitat von KingofKning Beitrag anzeigen
    Hallo,
    danke für den Hinweis, hatte jetzt mal im Forum weitergestöbert und Deine function gefunden.
    Habe die mal angepasst.

    CREATE FUNCTION plan ( PARARTNR CHAR(5) ) RETURNS
    VARCHAR(1024) LANGUAGE SQL READS SQL DATA BEGIN
    DECLARE RETURNVAL VARCHAR ( 1024 ) NOT NULL DEFAULT ' ' ;

    FOR CSRC1 AS C1 CURSOR
    FOR SELECT plan, ist
    FROM aruba_msvc/planz
    WHERE knd = PARARTNR
    DO SET RETURNVAL = RETURNVAL CONCAT ' ' CONCAT
    VarChar(CSRC1.plan) ;
    END FOR ;
    end

    und wenn ich die jetzt aufrufe mit

    select adkto, plan(adkto) from adr01pf

    bekomme ich den fehler
    Nachrichten-ID . . . . : SQL0204 Bewertung . . . . . . :
    Nachrichtenart . . . . : Diagnose

    Nachricht . . . : PLAN der Art *N in *LIBL nicht gefunden.
    Ursache . . . . : PLAN der Art *N in *LIBL wurde nicht gefunden.

    Was läuft hier falsch?

    GG
    HI,

    da wird die Function in der Bibliotheksliste nicht gefunden.

    Vielleicht hilft auch ein CAST auf den Eingabeparameter.

    Gruß
    Michael

  6. #6
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Das war meine erste Vermutung, aber die bib-Liste stimmt, extra nochmals geprüft.

    Cast könnte sein. Macht aber mit der Meldung doch eigentlich keinen Sinn oder?

    GG

  7. #7
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Zitat Zitat von KingofKning Beitrag anzeigen
    Das war meine erste Vermutung, aber die bib-Liste stimmt, extra nochmals geprüft.

    Cast könnte sein. Macht aber mit der Meldung doch eigentlich keinen Sinn oder?

    GG
    Tja, macht zwar keinen Sinn, ist aber wahrhaftig der falsche Datentyp, mußte dec statt char sein.

    Tolle Meldung.....

    GG

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Naja, macht es eigentlich schon. Du könntest nämlich die Funktion mit dem selben Namen mehrmals im System haben.
    Dies geht, wenn jede Funktion eine andere Art und/oder Anzahl an Parametern beinhaltet.

    Du könntest also z.B. folgende Funktionen haben:
    plan ( PARARTNR CHAR(5) )
    plan ( PARARTNR INTEGER )

    Wenn du dann die Funktion aufrufst sucht das System jene Funktion die mit den Parametern und deren Datentypen übereinstimmt.

    lg Andreas

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Tja, ist wie immer im Leben, wenn man keine Ahnung hat findet man manches sinnlos bis man es erklärt bekommt.

    GG

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. 2. SQL bringt keine Daten
    By Booley in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-05-04, 13:57
  5. query daten nebeneinander
    By qiwi2000 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 30-11-01, 08:59

Berechtigungen

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