PDA

View Full Version : SQL Ergebniskette



Seiten : [1] 2 3

Robi
16-11-12, 11:07
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

Fuerchau
16-11-12, 11:08
Ja, mit rekursievem CTE ;).

Robi
16-11-12, 11:22
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!

B.Hauser
16-11-12, 12:33
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

Robi
16-11-12, 13:30
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

B.Hauser
16-11-12, 13:40
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

ILEMax
21-11-12, 14:23
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

B.Hauser
21-11-12, 14:31
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

ILEMax
21-11-12, 14:45
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