Hi @ll,
ich habe mir jetzt die Zähne ausgebissen und hoffe dass jemand von euch eine zündende Idee hat.
Im Internet habe ich keine Lösung gefunden, bzw. ich habe die unten realisierte Lösung gefunden, die aber auf dem System i scheinbar nicht läuft.
Die Anforderung ist eigentlich ganz einfach: ich möchte Namen aus mehreren Zeilen einer Tabelle in separaten Spalten in einer Zeile ausgegeben haben.
Code:
Tabelle1:
Nummer1
4711
4712
4713
Tabelle2:
Nummer2 | Name
4711 | Name1
4711 | Name2
4711 | Name3
4711 | Name4
4712 | Name1
4712 | Name2
4713 | Name1
4713 | Name2
4713 | Name3
Code:
Ergebnis:
Nummer1 | Spalte1 | Spalte2 | Spalte3 | Spalte4
4711 | Name1 | Name2 | Name3 | Name4
4712 | Name1 | Name2 | |
4713 | Name1 | Name2 | Name3 |
Ich dachte mir in einer Variablen die Nummer zu merken, um festzustellen ob die Nummer wechselt und in der anderen Variablen hochzuzählen der wievielte Satz innerhalb jeder Nummer gelesen wurde. Damit habe ich gleichzeitig die Spalte in der der Name eingestellt werden muss.
Code:
CREATE VARIABLE yrn dec
CREATE VARIABLE ystnr dec
select Nummer1 as xxstnr, p.Nummer2, p.Name, yrn, ystnr, RowNum
MAX(CASE WHEN p.RowNum=1 THEN p.Name END) as Spalte1,
MAX(CASE WHEN p.RowNum=2 THEN p.Name END) as Spalte2,
MAX(CASE WHEN p.RowNum=3 THEN p.Name END) as Spalte3,
MAX(CASE WHEN p.RowNum=4 THEN p.Name END) as Spalte4
from Tabelle1
inner join ( select Nummer2, Name,
set yrn = case when Nummer2 <> ystnr then 0 end,
set ystnr = Nummer2,
set yrn = yrn + 1 as RowNum
from Tabelle2
group by Nummer2, Name
order by Nummer2, Name ) as p
on Nummer1 = p.Nummer2
order by Nummer1
Natürlich freue ich mich auch über eine andere Lösung
Gruß
wti
Bookmarks