View Full Version : SQL Ergebniskette
Hi *all
geht das mit SQL ?
Datei
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
Ja, mit rekursievem CTE ;).
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!
Es gibt 3 Möglichkeiten:
1. Rekursive CTE
2. Hierachische Query Anweisung
3. Handgestrickte UDF
@1: RCTE
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)
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
andreaspr@aon.at
16-11-12, 13:05
Zur hierarchischen Abfrabe habe ich auch ein Beispiel falls es dir weiter hilft:
NR SUCH
1.000 Wandfarbe
1.000 Dispersion
2.000 Lack
2.000 Kunstharz
1.000 Bla Bla
1.000 Noch was
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 ;
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
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
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
Hi,
das finde ich SUUUUPER Interessant.
nur verstehen tuh ich das nicht:mad:
Ich habe nun bei mir
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
MANDANTEN-NR TEXT
1.082 *POINTER
Was mach ich falsch?
Danke
der ILEMax
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
ich hab das
sys_connect_by_path(Trim(digits(KKLFDN)), ' ') as Text</pre>
geändert in
char(sys_connect_by_path(Trim(digits(KKLFDN)), ' ')) as Text</pre>
und bekomme
Ergebnis zu lang.
als Meldung, (auch bei varchar)
obwohl nur 3 Werte a 7 byte vorhanden sind
ILEMax