PDA

View Full Version : SQL Ergebniskette



Seiten : 1 [2] 3

andreaspr@aon.at
21-11-12, 14:58
Probiere es mit TRIM oder im schlechtesten Fall mit SUBSTRING.

lg Andreas

ILEMax
21-11-12, 15:15
nö, immer 'Ergebnis zu lang'

Fuerchau
21-11-12, 15:38
Mittels SUBSTR solltest du eigentlich einen Teil herausbekommen.
Allerdings ist die Funktion auf 1Mb beschränkt und arbeitet nicht "distinct".
Solltest du also doch mehr Werte haben, liegts nicht am substring sondern an der Verkettung.

Ggf. also vorher per DISTINCT auf eindeutige Werte reduzieren.

Das Ergebnis des sys_connect_by_path kannst du auch vorher casten:

cast(sys_connect_by_path(...) as varchar(nn)) as Text

Siehe auch hier:
http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/db2/rbafzscasys_cby_path.htm?resultof=%22%73%79%73%5f% 63%6f%6e%6e%65%63%74%5f%62%79%5f%70%61%74%68%22%20

ILEMax
21-11-12, 15:53
Danke,
aber ...

das geht leider auch nicht

hier mal mein Befehl

With x as (Select Row_Number() over(Order By kkmanr, rrn(a)) as seq,
a.* from ankkop a where kkmanr = 38),
y as (Select kkmanr, cast(char(sys_connect_by_path(
Trim(digits(KKLFDN)), ' ')) as varchar(10000)) as Text
from x
Start With kkmanr = 38 and seq = 1
connect by Prior Seq = Seq - 1)
Select kkmanr, Max(Text) as Text
From y
Group By kkmanr
Die Datei hat 6 Sätze mit kkmanr = 38, kklfdn ist 7P 0 definiert

Sql sagt: "Ergebnis zu lang"

Fuerchau
21-11-12, 16:18
Schau mal deinen SQL genau an, da ist ein cast zu viel drin!

Lass mal char(......) weg!

Die Funktion CHAR versucht nämlich einen CAST(... as char(1000000)) und das ist natürlich zu lang!

PS:
Auch der TRIM bei Digits ist unsinnig, da Digits keine Leerzeichen zurückgibt.

ILEMax
21-11-12, 16:34
Der Hammer, es funktioniert!

Danke!!!!!!

Wenn das jetzt noch jemand erklären könnte ...

ok mit dem 1. With wird eine Arbeitsdatei erstellt, die ...

ok ich versuch mal das SQL Buch zu interwiewen.
Verstanden hab ich es nicht, aber es geht ... Klasse!!

Der glückliche ILEMax

Fuerchau
21-11-12, 16:49
Weiteres siehst du hier:
hierarchical queries (http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/db2/rbafzhierquery.htm)

B.Hauser
21-11-12, 17:01
Hier ist auch noch ein Artikel zu dem Thema Hierarchische Queries:
Hierarchical Queries with DB2 Connect By (http://www.ibm.com/developerworks/ibmi/library/i-db2connectby/index.html)

Birgitta

ILEMax
26-04-13, 14:38
ich muß diese tolle sache nochmal aufwärmen.

Während

With x as (Select Row_Number() over(Order By kkmanr, rrn(a)) as seq,
a.* from ankkop a where kkmanr = 38),
y as (Select kkmanr, cast((sys_connect_by_path(
Trim(digits(KKLFDN)), ' ')) as varchar(10000)) as Text
from x
Start With kkmanr = 38 and seq = 1
connect by Prior Seq = Seq - 1)
Select kkmanr, Max(Text) as Text
From y
Group By kkmanr
toll funktioniert, habe ich versucht
mehrere kkmanr's zu selektieren.


With x as (Select Row_Number()
over(Order By kkmanr, rrn(a)) as seq,
a.* from ankkop a where kkmanr between 38 and 50),
y as (Select kkmanr, cast((sys_connect_by_path(
Trim(digits(KKLFDN)), ' ')) as varchar(20000)) as Text
from x
Start With kkmanr = 38 and seq = 1
connect by Prior Seq = Seq - 1)
Select kkmanr, Max(Text) as Text
From y
Group By kkmanr order by 1
im Ergebnis bekomme ich mit kkmanr = 38 das richtige Ergebnis. (5 Nr.)
mit kkmanr 39 aber das von 38 und von 39. (also 7 statt 2 Nr.)
Wenn ich den Start with in der seq verändere, z.B. auf 6, bekomme ich
keine Zeile 38 aber die 39 startet richtig.
Wie kann ich nun das SQL so umbauen, das ich nur die Nr. zu einer kkmanr bekomme, die dazu gehören?
Danke
Der ILEMax

Robi
26-04-13, 16:53
versuch mal das für dich um zu bauen

With x as (Select Row_Number() over(partition
By adadnr, adadn2
) as seq,
a.* from adresp a where (adadnr, adadn2) in(
select susunr, susun2 from schulp where susunr between 5 and 99)),
y as (Select adadnr, adadn2, cast((sys_connect_by_path(
Trim(digits(adadn3)), ' ')) as varchar(10000)) as Text
from x
Start With seq = 1
connect by Prior Seq = Seq - 1 and
Prior adadnr = adadnr and
Prior adadn2 = adadn2 )
Select adadnr, adadn2, max(Text) as Text
From y
group By adadnr, adadn2


Benötige aber auch nen Tip:
Wenn ich das in ein create view packe, bekomme ich einen SQL System fehler
Hat da jemand eine Idee?

Danke
Robi