PDA

View Full Version : SQL Daten nebeneinander



KingofKning
16-08-13, 08:34
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)

andreaspr@aon.at
16-08-13, 08:56
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

B.Hauser
16-08-13, 08:59
... in dem Du eine Case-Anweisung verwendest etwa so:


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

KingofKning
16-08-13, 11:53
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

mk
16-08-13, 12:22
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

KingofKning
16-08-13, 12:53
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

KingofKning
16-08-13, 12:55
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

andreaspr@aon.at
16-08-13, 13:13
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

KingofKning
17-08-13, 09:32
Tja, ist wie immer im Leben, wenn man keine Ahnung hat findet man manches sinnlos bis man es erklärt bekommt.

GG