Anmelden

View Full Version : group_concat aus mysql für db2?



Salutaris
29-03-12, 13:42
Hallo zusammen,

kennt jemand von euch für diese Funktion (group_concat aus mysql) einen Äquivalent auf der AS400/db2?

So sind Daten bei einer Tabelle gespeichert:

ArtNr SuchBegriff

1000 Wandfarbe
1000 Dispersion
2000 Lack
2000 Kunstharz

und das möchte ich raushaben:

1000 Wandfarbe, Dispersion
2000 Lack, Kunstharz

Scheint nicht ganz so einfach zu sein.

so long und Danke im Voraus.
Daniel

B.Hauser
29-03-12, 13:46
Für diese Funktion gibt es kein Äquivalent für die DB2.
Da musst Du Dir schon Deine eigene Funktion basteln.
Birgitta

andreaspr@aon.at
29-03-12, 14:27
Ab 7.1 könnte man sich eventuell noch mit connect by ein Select zusammen basteln, aber das wäre den Aufwand nicht wert.
Am besten eine Funktion schreiben die das macht.

B.Hauser
29-03-12, 17:26
Die hierachischen Query-Anweisungen bzw. die Funktion SYS_CONNECT_BY_PATH werden allerdings anders verwendet.

Sich eine kleine Funktion zu schreiben ist ja auch kein Hexenwerk.
Beispiel:


CREATE FUNCTION MySchema/MyFkt (
ParArtNr Dec(11, 0) )
RETURNS VARCHAR(1024)
LANGUAGE SQL
NOT DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE RETURNVAL VARCHAR ( 1024 ) DEFAULT ' ' ;

FOR CSRC1 AS C1 CURSOR
FOR SELECT LiefNr
FROM Table1
WHERE ARTNR = ParArtNr
DO SET RETURNVAL = RETURNVAL CONCAT ' ' CONCAT CSRC1.LiefNr;
END FOR ;
RETURN LTRIM(RETURNVAL);
END ;

Aufruf:

Select Distinct ArtNr, MyFkt(ArtNr)
From Table1;


Birgitta

Fuerchau
29-03-12, 17:32
with recursive rpl (artnr, suchb)
as (select a.artnr, a.suchb from myfile a
union all
select rpl.artnr, rpl.suchb
concat ', ' concat b.suchb
from rpl, myfile b
where rpl.art=b.art and rpl.art<>b.art
)
select * from rpl

Robi
30-03-12, 07:59
Auch wenn ich das Problem in der Form nicht habe ...

Sehr interessante Lösungen!
wieder was gelernt,

Danke
Robi

Fuerchau
30-03-12, 08:49
Die Lösung ist nicht ganz vollständig, man muss das Ergebnis schon noch zusätzlich auswerten, ggf. die Tiefe der Abfrage (Recursion) beschränken usw.

Funktioniert hat die Abfrage bei mir über genau 2 Ebenen, eine dritte habe ich nicht hinbekommen.

Ich habe auch versucht, per

select artnr, max(suchb) from rpl
group by artnr

das Ergebnis zu verbessern.
Nach angezeigten ca. 15.000.000 Zugriffen bei einer Tabelle mit ca. 300 Sätzen.